[英]javascript check onchange function on dynamic element
I created an HTML array with some tr
lines which need to be hidden by default and when user check the checkbox, the element is showed. 我创建了一个HTML数组,其中包含一些
tr
行,这些行默认情况下需要隐藏,并且当用户选中复选框时,将显示元素。
I have a Javascript function to show html element when checkbox is checked. 我有一个Javascript函数可以在选中复选框时显示html元素。 It works but not when I use a loop.
它有效,但是当我使用循环时不起作用。
I need that checkbox1 works on tr1, checkbox2 on tr2 ... 我需要在tr1上使用checkbox1,在tr2上使用checkbox2 ...
The PHP code which creates elements 创建元素的PHP代码
<?php
if (isset($_SESSION['wordsListArray']))
{
$length = count($_SESSION['wordsListArray']);
for ($i = 0; $i < $length; $i++)
{
echo '<tr><td>' . htmlspecialchars($_SESSION['wordsListArray'][$i]) . '</td><td>' . htmlspecialchars($_SESSION['translationsListArray'][$i]) . '</td><td><input type="checkbox" id="checkboxId' . ($i+1) . '"/></td></tr>';
echo '<tr class="trHide" id="trHide' . ($i+1) . '"><td><input type="text" placeholder=' . $_SESSION['personel_language_array'][0] . '></td><td><input type="text" name="other" placeholder=' . $_SESSION['personel_language_array'][1] . '></td><td><button type="submit">Edit</button><button type="submit">Erase</button></td></tr>';
}
}
?>
This Javascript works but only on one element (getElementById is unique), but I need a loop to use different Id (trHide1, trHide2 ...) 该Javascript有效,但仅适用于一个元素(getElementById是唯一的),但是我需要循环以使用不同的ID(trHide1,trHide2 ...)
var tr = document.getElementById("trHide1");
var check = document.getElementById("checkboxId1");
check.onchange = function() {
if(check.checked)
{
tr.style.display = 'contents';
}
else
{
tr.style.display = 'none';
}
};
I try this loop but it doesn't work. 我尝试了此循环,但没有用。
for (var i = 1; i <= lengthWordList; i++)
{
var trId = 'trHide' + i;
var checkId = 'checkboxId' + i;
var tr = document.getElementById(trId);
var check = document.getElementById(checkId);
check.onchange = function() {
if(check.checked)
{
tr.style.display = 'contents';
}
else
{
tr.style.display = 'none';
}
};
}
Your code does not work because it overwrites the event and the selector 您的代码无效,因为它会覆盖事件和选择器
This could be worth it 这可能是值得的
var elemento=[];
for (var i = 1; i <= 2; i++)
{
var trId = 'trHide' + i;
var checkId = 'checkboxId' + i;
console.log(trId);
elemento.push(
{
tr:document.getElementById(trId),
check:document.getElementById(checkId),
event:function(){}
}
);
console.log(elemento[(i-1)]);
elemento[(i-1)].check.setAttribute('elemento',(i-1));
elemento[(i-1)].event = elemento[(i-1)].check.onchange = function() {
var valor = this.getAttribute('elemento');
if(elemento[valor].check.checked)
{
elemento[valor].tr.style.display = 'contents';
}
else
{
elemento[valor].tr.style.display = 'none';
}
};
}
var elemento=[]; for (var i = 1; i <= 2; i++) { var trId = 'trHide' + i; var checkId = 'checkboxId' + i; console.log(trId); elemento.push( { tr:document.getElementById(trId), check:document.getElementById(checkId), event:function(){} } ); console.log(elemento[(i-1)]); elemento[(i-1)].check.setAttribute('elemento',(i-1)); elemento[(i-1)].event = elemento[(i-1)].check.onchange = function() { var valor = this.getAttribute('elemento'); if(elemento[valor].check.checked) { elemento[valor].tr.style.display = 'contents'; } else { elemento[valor].tr.style.display = 'none'; } }; }
<table> <tr id="trHide1" style="display:none"><td>AAAA</td></tr> <tr id="trHide2" style="display:none"><td>BBBB</td></tr> </table> <input type="checkbox" id="checkboxId1"> <input type="checkbox" id="checkboxId2">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.