【问题标题】:jQuery change() not firing prototype event handlersjQuery change() 没有触发原型事件处理程序
【发布时间】:2011-07-18 02:39:22
【问题描述】:

我有一个现有的原型代码库,可以对选择框进行更改...

我使用了 jQuery 来生成(样式化的)无序列表,我希望将对该列表的点击代理到我的选择框...这一切都很好(在选择框上调用 val()),但原型不会接受这些变化,即使我在选择框上明确调用change()...有人知道发生了什么吗?

我可以发布一堆代码,但它们都是非常基础的,我认为唯一相关的部分是:

parent_obj.val(selected_idx).change();

这会更改我的选择框中的选定项目,但不会触发我的原型事件处理程序。

编辑:

可能会有一个关于使用 trigger() 等的答案......这似乎也不起作用:

parent_obj.val(selected_idx).click().change().trigger('click');
parent_obj.find('option value[' + selected_idx + ']').click().change().trigger('click');

【问题讨论】:

    标签: jquery prototypejs dom-events


    【解决方案1】:

    我通过混合使用 jQuery 和 vanilla Javascript 解决了这个问题

    parent_obj.val(selected_idx);
    parent_obj.get(0).dispatchEvent(new Event('change'));
    

    【讨论】:

      【解决方案2】:

      因此,解决方案是使用“simulate.js”,因为您无法使用 jQuery 触发在原型上注册的事件。

      挣扎了几分钟后,我意识到为了“simulate.js”在选择选项上工作,它需要先选择你想要的选项 在我的示例中,我希望默认选择最后一个选项

      $$('select#shipping_method option').last().selected=true;
      $$('select#shipping_method option').last().simulate('change');
      

      问候

      【讨论】:

        【解决方案3】:

        我最终按照这个答案的建议使用了原型 Event.simulate;

        Trigger an event with Prototype

        【讨论】:

          【解决方案4】:

          可能你需要看看这里jQuery.noConflict()的使用,然后确保隔离。 http://api.jquery.com/jQuery.noConflict/

          请参阅有关原型活动内容的帖子:Trigger an event with Prototype

          【讨论】:

          • 没有冲突。两个代码都工作得很好,我已经在使用 noConflict 和 jQuery 的匿名包装函数 (function($) { ... })(jQuery); - 问题在于在使用 jQuery 进行更改后触发原型事件处理程序。
          • 在这两者之外拥有一个从 jQuery 调用的函数来触发原型事件处理程序也可能会有所帮助。
          【解决方案5】:

          所有trigger(或change,这只是trigger('change') 的快捷方式)所做的就是调用绑定的jQuery 事件处理程序。从 javascript 更改值也不会触发处理程序(想想可能导致的所有无限循环!)。一般来说,没有可靠的方法从 javascript 触发事件。您可能应该使用单个框架来进行事件处理。否则,您应该找到 Prototype 的 trigger 等效项并手动调用它。

          【讨论】:

          • 我 - 正在使用单个框架来进行事件处理。我希望能够从另一个框架触发一个事件......虽然我说这不再需要,因为我在以下链接中找到了我的答案:stackoverflow.com/questions/460644/…Event.simulate 很适合我。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多