简体   繁体   English

javascript检查动态元素上的onchange函数

[英]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.

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