【问题标题】:What is the difference between jQuery change and onchange of HTML?jQuery change 和 HTML 的 onchange 有什么区别?
【发布时间】:2015-12-08 08:14:46
【问题描述】:

我有以下 HTML 代码:

<select name="test123" id="test123" onchange="testOnchange()">
  <option>Chocolate</option>
  <option>Candy</option>
  <option>Taffy</option>
  <option>Caramel</option>
  <option>Fudge</option>
  <option>Cookie</option>
</select>
<script>
$( "#test123" ).change(function() {
    console.log("change");
  });
function testOnchange() {
    console.log("onchange");
}
</script>

如果我使用 JS 为 select 设置一个值,如下所示:

$("#test123").val("Candy");

为什么testOnchange() 会触发,而jQuery change 不会?

changeonchange 之间到底有什么区别?

【问题讨论】:

    标签: javascript jquery html onchange


    【解决方案1】:

    这是因为你在绑定change事件之前没有确保在dom中加载了&lt;select&gt;,检查这个fiddle

    当这些脚本被包装在documentonload 事件中时,检查这个fiddle again

    另外,如果您以编程方式设置值,则还需要以编程方式触发 change() 事件,请检查 herehere

    $( document ).ready( function(){
        $( "#test123" ).change(function () {
            console.log("change");
        });
    });
    
    function testOnchange(){
        console.log("onchange")
    }
    

    【讨论】:

    • 由于脚本位于元素下方,因此该元素在事件绑定发生之前可用,因此这不需要文档就绪包装器,尽管最好使用文档就绪包装器。
    • @Jai 假设您指的是 guest271314 的回答。在这种情况下,脚本的位置很重要,这本身可能并不理想。
    • 我看到了你的答案,这就是为什么我需要告诉你,如果你在文档关闭时将代码放在下面并且事实上你的答案并没有清楚地回答问题,那么文档准备好并不重要。
    • @Jai “事实上你的答案并没有清楚地回答这个问题”,是吗?事实上,我已经解释了为什么提问者的代码没有给他/她期望的结果。 “为什么 testOnchage() 会触发,而 jquery 的变化不会触发?”
    • $("#test123").val("Candy") 如果以这种方式更改值。你的代码里有吗?
    【解决方案2】:

    为什么 testOnchange() 触发了,而 jQuery 没有改变?

    这是因为onchange 是在 DOM api 中定义的事件,而.change 来自jQuery 的事件对象。

    因此,尽管当您使用 jQuery 代码 $("#test123").val("Candy") 应用更改事件时,它会在 DOM 中引发更改事件,因此只会触发原生事件。

    如果您也想触发jQuerychange 事件,那么您需要按照其他答案的建议手动触发它。 $("#test123").val("Candy").change();

    【讨论】:

    • 你的意思是$("#test123").val("Candy")会触发onchange事件并执行testOnchange
    【解决方案3】:

    $("#test123").val("Candy") 不触发onchange 事件见,http://jsfiddle.net/j58s9ngvhttp://jsfiddle.net/j58s9ngv/1


    设置value后尝试调用.change()触发onchange事件

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
    </script>
    <select name="test123" id="test123" onchange="testOnchange()">
      <option>Chocolate</option>
      <option>Candy</option>
      <option>Taffy</option>
      <option>Caramel</option>
      <option>Fudge</option>
      <option>Cookie</option>
    </select>
    <script>
    $( "#test123" ).change(function () {
        console.log("change");
      });
    function testOnchange(){
        console.log("onchange")
    }
      $("#test123").val("Candy").change()
    </script>

    【讨论】:

    • $("#test123").val("Candy") 这可能会导致更改事件,所以为什么还要触发更改事件。
    • @Jai "$("#test123").val("Candy")这可能会导致in change事件,所以为什么还要触发change事件。" $("#test123").val("Candy")不会触发onchange事件看, jsfiddle.net/j58s9ngv , jsfiddle.net/j58s9ngv/1
    • 这就是我想提到的,你应该在你的答案中添加它。
    【解决方案4】:

    $("#test123").val("Candy") 不会触发 onchange 事件。我觉得两者都一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 2017-06-11
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2020-11-30
      • 2010-12-19
      相关资源
      最近更新 更多