Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $(“选择器”)。单击vs.onchange_Javascript_Jquery - Fatal编程技术网

Javascript $(“选择器”)。单击vs.onchange

Javascript $(“选择器”)。单击vs.onchange,javascript,jquery,Javascript,Jquery,正如一些人指出的那样,我将onchange和onclick混合在一起 我昨天发布了,有人友好地回答了我的问题,但我不太明白为什么$selector.click methon有效,但onchange=。。。没有 所以,如果我有HTML,在父元素DataTable cloumn标头中,任何单击标头都会触发DataTable排序例程: <div> <input type="checkbox" id="select_all" onchange="SelectAll(event)

正如一些人指出的那样,我将onchange和onclick混合在一起

我昨天发布了,有人友好地回答了我的问题,但我不太明白为什么$selector.click methon有效,但onchange=。。。没有

所以,如果我有HTML,在父元素DataTable cloumn标头中,任何单击标头都会触发DataTable排序例程:

<div>
    <input type="checkbox" id="select_all" onchange="SelectAll(event)">
    SELECT ALL
</div>
//只有在父元素中的排序例程被激发后,才会命中它。 函数SelectAllevent{ 事件。停止传播; var-box=document.queryselectoral[name*=\include\uu \];//所有前缀为include的复选框。 var chk=document.getElementById'select_all'。选中; 对于变量i=0;i 在onchange逻辑中,您提供的是全局事件对象,它在所有浏览器中都不可用,也不能100%保证是您期望的单击事件

因此,最好避免使用on*事件属性,并在本机JS或jQuery中使用一个不引人注目的事件处理程序,就像您的第二个JS示例所做的那样。传递给handler函数的事件对象保证是包含所需信息的相关事件


还要注意,jQuery逻辑使用的是单击事件处理程序,而不是更改。您应该将.click更改为.change,以便事件处理程序仍然适用于通过键盘浏览web的用户。

onChange事件通常在元素失去焦点时触发,因此将首先触发click事件。

如果要使用jQuery,请使用它。你为什么要把旧式的onxxxx属性和这个混为一谈

您的代码非常简单。只需这样做:

<div>
    <input type="checkbox" id="select_all">
    SELECT ALL
</div>

function SelectAll( event ) {
    event.stopPropagation();

    var chk = $('#select_all')[0].checked;
    $("[name*=\"include_\"]").each( i, element ) {
        if( ! element.disabled ) {
            element.checked = chk;
        }
    }
}

$("#select_all").click( SelectAll );

您使用的是onChange事件,而不是onclick。在某些浏览器中,onchange仅在元素失去焦点时触发,因此onclick将首先触发。更改事件在文本输入模糊时触发。对于复选框,它立即被提出。我接受你的观点。通过C/C++编程,我发现jquery的语法比原生JS更不容易一目了然地解释。如果我的代码中有jquery,它通常是由其他人提供的。但我确实打算转换,我保证。如果有帮助的话,有一件事需要记住,jQuery是原生JavaScript。毕竟,jQuery只是一个JavaScript库。它没有在JavaScript语言中引入任何尚不存在的语法:根据定义,每一行jQuery代码都是一行JavaScript代码。它不是使用预处理器来证明自己的语法。您只需调用jQuery库提供的函数,调用方式与在任何其他库或您自己的代码中调用函数的方式相同。