简体   繁体   English

选中复选框时如何禁用附加的输入文本框

[英]How to disable appended input text box when checkbox is checked javascript

I want to disable the text box when the checkbox is checked for the appended text box. 我要在选中附加文本框的复选框时禁用该文本框。 The hard coded text box is disabled when the checkbox is checked. 选中此复选框后,硬编码文本框将被禁用。 Run the code snippet to see the outcome or view the screenshots shown below. 运行代码片段以查看结果或查看下面显示的屏幕截图。

Below is the main.js and main.html file 以下是main.js和main.html文件

 <!--main.js--> var counter = 0; function addMore() { counter++; var objNewDiv = document.createElement('div'); objNewDiv.setAttribute('id', 'addProg' + counter); objNewDiv.innerHTML = '<div class="row"> <div class="3u 12u$(medium)"> <div class="select-wrapper"> <select> <option value="">-Select Programme-</option> <option value="1">Yogalates</option> <option value="2">Pilates</option> <option value="3">Kick Boxing</option> <option value="4">K-Pop Dance</option> <option value="5">Hip Hop</option> <option value="6">Jazz Aerobics</option> <option value="7">Zumba</option> <option value="8">Fitball</option> </select> </div> </div>' + '<p class="12u$(xsmall)">OR</p>' + '<div class="3u 12u$(medium)"> <div class="12u$"> <input type="text" value="" placeholder="Customize your own programme"/> </div> </div>' + '<div class="2u 12u$(medium)"> <div class="12u$"> <input id="venueTB' + counter + '" type="text" value="" placeholder="Venue" /> </div> </div>' + '<div class="2u 12u$(medium)"> <input type="checkbox" id="venueChk' + counter + '"name="venueChk" onclick="checkBox()"> <label for="venueChk' + counter + '" >No Venue</label> </div>'; document.getElementById('newProg').appendChild(objNewDiv); } function removeProg() { if (0 < counter) { document.getElementById('newProg').removeChild(document.getElementById('addProg' + counter)); counter--; } else { alert("No boxes to remove"); } } function checkBox() { var checkElement = document.getElementById('venueTB'); var checkDisabled = checkElement.disabled = true; if (checkElement != null && checkDisabled) { checkElement.value = "-NO VENUE-"; } } 
 <!--main.html--> <div class="row"> <div class="3u 12u$(medium)"> <div class="select-wrapper"> <select> <option value="">-Select Programme-</option> <option value="1">Yogalates</option> <option value="2">Pilates</option> <option value="3">Kick Boxing</option> <option value="4">K-Pop Dance</option> <option value="5">Hip Hop</option> <option value="6">Jazz Aerobics</option> <option value="7">Zumba</option> <option value="8">Fitball</option> </select> </div> </div> <p>OR</p> <div class="3u 12u$(medium)"> <div class="12u$"> <input type="text" value="" placeholder="Customize your own programme" /> </div> </div> <div class="2u 12u$(medium)"> <div class="12u$"> <input id="venueTB" type="text" value="" placeholder="Venue" /> </div> </div> <div class="2u 12u$(medium)"> <input type="checkbox" id="venueChk" name="venueChk" onclick="checkBox()"> <label for="venueChk">No Venue</label> </div> </div> <div id="newProg"></div> <div class="row"> <div class="2u 12u$(medium)"> <a class="button" onclick="addMore()"> <div style="font-size: 35px">+</div> </a> <a class="button" style="margin:0 0 0 1em" onclick="removeProg()"> <div style="font-size: 35px">-</div> </a> </div> </div> 

actual outcome 实际结果

expected outcome 预期结果

it's because document.getElementById('venueTB') returns the first element in the DOM with id="venueTB" . 这是因为document.getElementById('venueTB')返回DOM中id="venueTB"第一个元素。 Try to add classes to all the checkboxes, and get them by calling 尝试将类添加到所有复选框,并通过调用获取它们

document.querySelectorAll('.class-name')

Another thing, in checkBox() function, i think it should be: 另一件事,在checkBox()函数中,我认为应该是:

var checkDisabled = checkElement.disabled == true;

instead of: 代替:

var checkDisabled = checkElement.disabled = true;

The IDs must be unique. 这些ID必须是唯一的。 Because you have inline js functions you can change from: 因为您具有内联js函数,所以可以从以下位置进行更改:

<input type="checkbox" id="venueChk" name="venueChk" onclick="checkBox()">

To: 至:

<input type="checkbox" id="venueChk" name="venueChk" onclick="checkBox(event, this)">

In this way you will pass: 这样,您将通过:

  • the event object 事件对象
  • this: the current DOM object this:当前的DOM对象

In this way your function can be: 这样,您的功能可以是:

function checkBox(e, obj) {
    var checkElement = obj.parentNode.previousElementSibling.querySelectorAll('input')[0];
    var checkDisabled = checkElement.disabled = true;
    if (checkElement != null && checkDisabled) {
        checkElement.value = "-NO VENUE-";
    }
}

The snippet: 片段:

 var counter = 0; function addMore() { counter++; var objNewDiv = document.createElement('div'); objNewDiv.setAttribute('id', 'addProg' + counter); objNewDiv.innerHTML = '<div class="row"> <div class="3u 12u$(medium)"> <div class="select-wrapper"> <select> <option value="">-Select Programme-</option> <option value="1">Yogalates</option> <option value="2">Pilates</option> <option value="3">Kick Boxing</option> <option value="4">K-Pop Dance</option> <option value="5">Hip Hop</option> <option value="6">Jazz Aerobics</option> <option value="7">Zumba</option> <option value="8">Fitball</option> </select> </div> </div>' + '<p class="12u$(xsmall)">OR</p>' + '<div class="3u 12u$(medium)"> <div class="12u$"> <input type="text" value="" placeholder="Customize your own programme"/> </div> </div>' + '<div class="2u 12u$(medium)"> <div class="12u$"> <input id="venueTB' + counter + '" type="text" value="" placeholder="Venue" /> </div> </div>' + '<div class="2u 12u$(medium)"> <input type="checkbox" id="venueChk' + counter + '"name="venueChk" onclick="checkBox(event, this)"> <label for="venueChk' + counter + '" >No Venue</label> </div>'; document.getElementById('newProg').appendChild(objNewDiv); } function removeProg() { if (0 < counter) { document.getElementById('newProg').removeChild(document.getElementById('addProg' + counter)); counter--; } else { alert("No boxes to remove"); } } function checkBox(e, obj) { var checkElement = obj.parentNode.previousElementSibling.querySelectorAll('input')[0]; if (obj.checked) { checkElement.disabled = true; checkElement.value = '-NO VENUE-'; } else { checkElement.disabled = false; checkElement.value = ''; } } 
 <div class="row"> <div class="3u 12u$(medium)"> <div class="select-wrapper"> <select> <option value="">-Select Programme-</option> <option value="1">Yogalates</option> <option value="2">Pilates</option> <option value="3">Kick Boxing</option> <option value="4">K-Pop Dance</option> <option value="5">Hip Hop</option> <option value="6">Jazz Aerobics</option> <option value="7">Zumba</option> <option value="8">Fitball</option> </select> </div> </div> <p>OR</p> <div class="3u 12u$(medium)"> <div class="12u$"> <input type="text" value="" placeholder="Customize your own programme" /> </div> </div> <div class="2u 12u$(medium)"> <div class="12u$"> <input id="venueTB" type="text" value="" placeholder="Venue" /> </div> </div> <div class="2u 12u$(medium)"> <input type="checkbox" id="venueChk" name="venueChk" onclick="checkBox(event, this)"> <label for="venueChk">No Venue</label> </div> </div> <div id="newProg"></div> <div class="row"> <div class="2u 12u$(medium)"> <a class="button" onclick="addMore()"> <div style="font-size: 35px">+</div> </a> <a class="button" style="margin:0 0 0 1em" onclick="removeProg()"> <div style="font-size: 35px">-</div> </a> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM