【问题标题】:Preventing onchange being triggered on an input防止在输入上触发 onchange
【发布时间】:2016-07-27 13:34:19
【问题描述】:

可以防止 onchange 事件被触发吗? 我想在任何情况下都阻止它(例如失去对输入的关注),并且仅在我手动执行时触发它,例如:

$('#my_input_id').val('a value').change();

【问题讨论】:

  • 为什么不触发自定义事件???或者只是在需要时调用一个函数?无论如何,听起来像XY problem
  • 触发 javascript onchange 事件时,我的控制器中基于链接的 Ajax 函数提交数据。我想防止这种情况并控制何时调用我的控制器中的函数。提到该函数被调用仅当调用 javascript onchange 时。
  • 因此,如果您不想在输入更改时发送数据,为什么首先要在更改事件处理程序中设置此逻辑?也许我错过了一些东西,但这真的不清楚你在说什么
  • 因为我在那个输入上有一个日期选择器,当我用鼠标选择日期时它不会自动触发 onchange。所以我应该在 datepicker 事件函数中强制它。另一方面,当我使用键盘修改输入中的日期,它会触发 onchange 并输入我强制 onchange 的事件函数。所以我有一个问题,当用键盘修改日期时,我的控制器函数被调用了两次。我想在焦点输出输入时阻止 onchange 事件,因为已经在 datepicker 事件函数中触发了。
  • 再一次,与其询问有关任何解决方法的问题,不如重新询问有关it does not trigger onchange automatically when I pick the date with the mouse 的新问题,因为它应该这样做。但是你在说哪个 datepicker 插件?或者您使用的是原生 HTML5 输入日期?无论如何,你必须提供 MCVE

标签: javascript jquery input onchange


【解决方案1】:

如果我理解您的问题,这是我的解决方案:

HTML:

<input type="text" id="inp">
<input type="button" id="btn" value="trigger change">

jQuery :

$("#inp").change(function(e, data) {
  if (data) {
    console.log("change by trigger");
  } else {
    console.log("normal change");
  }
})

$("#btn").click(function() {
    $("#inp").val("12").trigger("change", true);
})

LIVE DEMO JSFIDDLE

【讨论】:

  • 这仍然会触发“正常更改”。不管有没有功能,我都不想通过更改功能进入。
  • @MoroianuAlexandru 你在找e.preventDefault() 吗?
  • 是的,但我不知道如何准确地使用它。我试图阻止Default() onfocusout,但它仍然会触发 onchange。
  • @MoroianuAlexandru $("#you_id").change(function(e) { e.preventDefault(); // do stuff })
  • @JaxTeller 输入更改事件没有默认行为
【解决方案2】:

只需在您的活动中进行设置:

if (en==1){
//code here
en=0;
}

在手动调用函数之前设置en

en=1;
$('#my_input_id').val('a value').change()

我们最终将 en 设置回零,因此我们不会意外地重新启用它。运维

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2021-06-10
    • 2017-06-03
    相关资源
    最近更新 更多