簡體   English   中英

HTML復選框事件監聽器不起作用?

[英]Html checkbox event listener not working?

我有多個具有相同名稱的復選框,並且都可以通過javascript訪問它們,但是我無法為其中的任何一個添加事件監聽器。 我已經嘗試了在互聯網上找到的所有解決方案。 但就我而言,它們都不起作用,這意味着未調用我的目標偵聽器方法selectAll 我的代碼如下

的HTML

<div class="row" th:each="bytesaver : ${bytesaverList}">
<div class="col-md-12 col-sm-12 col-xs-12">
    <div class="x_panel">
        <div class="x_title">
            <h2 th:text="${bytesaver.name}">Bytesaver 1</h2>
            <div class="clearfix"></div>
        </div>
        <div class="x_content">
            <div>
                <table class="table table-bordered">
                    <thead>
                        <th>
                            <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" th:value="${bytesaver.name}"/> 
                            Select All
                        </th>
                    </thead>
                </table>
            </div>

        </div>
        <!-- x_content -->
    </div>
    <!-- x_panel -->
</div>
<!-- available IP List -->

Java腳本

$(document).ready(function() {

var selectAllBoxs = document.getElementsByName("checkBoxByteSaver");
console.log("total element count: "+selectAllBoxs.length)
for (var i = 0; i < selectAllBoxs.length; i++) {
    //selectAllBoxs[i].change(selectAll);
    console.log("Value: "+selectAllBoxs[i].value +" boolean: "+selectAllBoxs[i].addEventListener);

        selectAllBoxs[i].addEventListener ("CheckboxStateChange", selectAll, false);

}
}

function selectAll(){
    console.log("Select All pressed");
}

在的地方selectAllBoxs[i].addEventListener我已經嘗試了一些其他方法,如selectAllBoxs[i].onclick = function() { selectAll(); } selectAllBoxs[i].onclick = function() { selectAll(); }

selectAllBoxs[i].addEventListener( 'change', function() {
        if(selectAllBoxs[i].checked) {
            console.log("Some checkbox is selected. Value: "+selectAllBoxs[i].value);
        } else {
            // Checkbox is not checked..
            console.log("Some checkbox is unselected. Value: "+selectAllBoxs[i].value);
        }
    });

if (selectAllBoxs[0].addEventListener) {
    for (var i = 0; i < selectAllBoxs.length; i++) {
       selectAllBoxs[i].addEventListener("change", selectAll, false);
     }
    } else if (selectAllBoxs[0].attachEvent) {
     for (var i = 0; i < selectAllBoxs.length; i++) {
       selectAllBoxs[i].attachEvent("onchange", selectAll);
     }
    }

但不幸的是,它們都不起作用。

value復選框改變。 checked屬性。 復選框的工作方式與您期望的不同。

如果未選中該復選框, 則該表單就不會包含在該表單中

因此,Thymeleaf會為每個具有th:field綁定的復選框生成一個隱藏的文本輸入。

這證明一個簡單的變更偵聽器將被調用

 document.addEventListener('DOMContentLoaded', function() { let cbs = document.getElementsByName('checkBoxByteSaver'); for (let i = 0; i < cbs.length; i++) { cbs[i].addEventListener('change', hubbaloo); } }) function hubbaloo(e) { console.log(this.value, this.checked ? 'checked' : 'not checked'); } 
 <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" value="foo" /> <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" value="bar" /> <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" value="baz" /> <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" value="yo" /> <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" value="yolo" /> 

 $(document).ready(function() { var selectAllBoxs = document.getElementsByName("checkBoxByteSaver"); console.log("total element count: "+selectAllBoxs.length) for (var i = 0; i < selectAllBoxs.length; i++) { //selectAllBoxs[i].change(selectAll); console.log("Value: "+selectAllBoxs[i].value +"boolean: "+selectAllBoxs[i].addEventListener); selectAllBoxs[i].addEventListener ("change", selectAll, false); } }) function selectAll(e){ console.log("Select All pressed"); if(e.target.checked) { console.log(e.target.value + " is checked"); } else { console.log(e.target.value + " is unchecked"); } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="row" th:each="bytesaver : ${bytesaverList}"> <div class="col-md-12 col-sm-12 col-xs-12"> <div class="x_panel"> <div class="x_title"> <h2 th:text="${bytesaver.name}">Bytesaver 1</h2> <div class="clearfix"></div> </div> <div class="x_content"> <div> <table class="table table-bordered"> <thead> <th> <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" th:value="${bytesaver.name}" value="Select All 1"/> Select All 1 </th> <th> <input type="checkbox" class="form-control flat" name="checkBoxByteSaver" th:value="${bytesaver.name}" value="Select All 2"/> Select All 2 </th> </thead> </table> </div> </div> <!-- x_content --> </div> <!-- x_panel --> </div> <!-- available IP List --> 

只需使用change事件而不是CheckboxStateChange事件即可。

使用此代碼: https : //jsfiddle.net/q0mc4gLx/

$(document).ready(function() {

    var selectAllBoxs = document.getElementsByName("checkBoxByteSaver");
    console.log(selectAllBoxs)
    console.log("total element count: " + selectAllBoxs.length)
    for (var i = 0; i < selectAllBoxs.length; i++) {
        //selectAllBoxs[i].change(selectAll);
        console.log("Value: " + selectAllBoxs[i].value + " boolean: " + selectAllBoxs[i].addEventListener);

        selectAllBoxs[i].addEventListener('change', function() {
            if (this.checked) {
                selectAll();
            }
        });

    }
})

function selectAll() {
    console.log("Select All pressed");
}

這對你有幫助

 $(document).ready(function () {
        debugger;
        var selectAllBoxs = document.getElementsByName("checkBoxByteSaver");


        $("input[name='checkBoxByteSaver']").each(function () {

            $(this).bind('change', selectAll);

        });

    });

    function selectAll() {
        debugger;
        console.log("Select All pressed");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM