【问题标题】:Jquery: bind load + change simultaneouslyJquery:同时绑定加载+更改
【发布时间】:2016-09-27 23:28:38
【问题描述】:

在许多情况下,我需要在加载后将行为绑定到元素,然后在事件触发后(如“更改”)。 我认为最好的方法是让它在同一行:

$('#element_id').bind('load, change', function () {
...
});

但这仅适用于“更改”而不适用于“加载”。有更好的方法吗?

【问题讨论】:

  • 我删除了逗号,但它仍然不起作用。我认为负载会有一些限制

标签: javascript jquery


【解决方案1】:

我偶然发现了同样的问题。删除逗号是不够的,至少在这种情况下不是:

$(document).ready(function(){
    $('#element_id').bind('load change', function () {
        ... // (this DOESN'T get called on page load)
    });
});

我猜load 事件在$(document).ready() 之前触发。

这是一个简单的解决方案:

$(document).ready(function(){
    $('#element_id').bind('change', function () {
        ...
    });
    $('#element_id').trigger('change');
});

【讨论】:

  • 即使这样也会循环更改事件十亿次。不知道为什么。我尝试了这种方法和其他方法,它只是一直想循环。
  • 你是在函数内部触发事件吗?它不应该循环,某处一定有错误。您可以尝试制作一个最小的错误案例并在单独的问题中发布代码;您很可能会在点击“发布”按钮之前弄清楚。 :)
  • 不在函数内部触发。 $('#employeeDropDown').on('change', function (event) { var form = $(event.target).parents("form"); form.submit(); }).trigger('change' );甚至正如你在上面所说的那样,会导致它循环。
  • 我认为你是 - form.submit() 也可能触发更改事件。使用console.log()(或 JavaScript 调试器,如果您愿意)查看哪个部分在循环。但实际上,这与这个问题无关,您应该发布自己的问题。我可以向您保证,上面的答案中没有任何内容会使其循环 - 我经常使用它并且它有效。
  • Bind 自 jQuery 3.0 起已弃用,但这仍然可以完美运行(只需将 bind 替换为 on 然后调用 trigger。此外,这是根据现在的文档,不确定它在 2011 年读回了什么。在 ready 事件上调用 load 被认为是不安全的,并且在动态加载脚本时不会运行。请参阅:api.jquery.com/ready
【解决方案2】:

对于已经加载的内容,当您想在事件上运行函数时,也可以立即使用您自己命名的自定义事件,以避免在内置事件上触发来自库等的任何现有绑定,例如

$(".my-selector").on("change rightnow", function() {
  // do stuff...
}).triggerHandler("rightnow");

【讨论】:

    【解决方案3】:

    你不需要去掉逗号吗?

    【讨论】:

      【解决方案4】:

      试试不带逗号:

      $('#element_id').bind('load change', function () {
      ...
      });
      

      http://api.jquery.com/bind/#multiple-events

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多