javascript - JQuery - 为什么 Trigger 方法调用它三次?

标签 javascript jquery

$(document).ready(function(){
    $("input").select(function(){
        $("input").after(" Text marked!");
    });
    $("button").click(function(){
        $("input").trigger("select");
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>


<input type="text" value="Hello World"><br><br>

<button>Trigger the select event for the input field</button>

Source

有人能告诉我为什么点击按钮后 select 事件会触发 3 次吗?

似乎使用IE和Chrome会导致不同的结果。

最佳答案

JQuery - Why does Trigger method call it three times?

似乎在 buttonclick 事件中被调用了两次;在

$("input").trigger("select");

select 事件的默认处理程序

$("input").select(function(){
    $("input").after(" Text marked!");
});

要在 buttonclickinput 字段中的用户选择时调用一次,请尝试检查 event.isTrigger 确定 event 是否被 .trigger()

调用

$(document).ready(function(){
    $("input").select(function(e){
      if (!e.isTrigger)
        $("input").after(" Text marked!");
    });
    $("button").click(function(){
        $("input").trigger("select");
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<input />
<button>click</button>


或者,使用 setTimeout 允许在 .trigger("select") 称为 ;在 button 元素的 click

处最多应调用一次原始事件处理程序

$(document).ready(function() {
  
  $("input").select(function(e) {
    console.log(e);
    $("input").after(" Text marked!")
  })

  $("button").click(function() {
    setTimeout(function() {
      $("input").trigger("select");
    })
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<input />
<button>click</button>

关于javascript - JQuery - 为什么 Trigger 方法调用它三次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907765/

相关文章:

javascript - 如何删除 Jquery 中两个元素之间的文本?

javascript - 即使未选中也获取复选框值?

javascript - 同步 Ajax 调用和executeQueryAsync Sh​​arePoint JS CSOM

javascript - 如果此下拉列表的值为 "1"并且此下拉列表的值为 "Active"

javascript - ng-click 后 Angular 不会重置表单?

php - JSON 解析对象为 javascript 函数 : syntaxerror

javascript - 更改 Angular $location.path 以响应推送服务

javascript - 在 iOS 中从网页执行 JS 函数

jquery - 向现有 JQ GRID 添加新列

javascript - 在 DOM 完成之前渲染调用 - meteor blaze