jQuery change不触发原型事件处理程序

问题描述

| 我有一个现有的原型代码库,可以对选择框进行更改。 我使用的是jQuery,它会生成(样式化的)无序列表,并且希望将对该列表的点击代理到我的选择框...这一切都很好(在选择框上调用ѭ0but),但是即使在我更改时,原型也无法进行这些更改在选择框上显式调用
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\');
    

解决方法

        我最终按照该答案的建议使用了Event.simulate原型。 使用原型触发事件     ,        所有
trigger
(或
change
,这只是
trigger(\'change\')
的快捷方式)所做的都是调用绑定的jQuery事件处理程序。从javascript更改值也不会触发处理程序(请考虑可能引起的所有无限循环!)。通常,没有可靠的方法可以从javascript触发事件。您可能应该使用单个框架来进行事件处理。否则,您应该找到与type3ѭ等效的Prototype \,并手动调用它。     ,        我通过混合使用jQuery和香草Javascript解决了这个问题
parent_obj.val(selected_idx);
parent_obj.get(0).dispatchEvent(new Event(\'change\'));
    ,        您可能需要在此处查看ѭ8的用法,然后确保隔离。 http://api.jquery.com/jQuery.noConflict/ 参见有关protype事件的文章:使用Prototype触发事件     ,        因此,解决方案是使用\“ simulate.js \”,因为您无法触发使用jQuery在原型上注册的事件。 经过几分钟的努力,我意识到,为了使“ simulate.js”在选择选项上起作用,需要首先选择您想要的选项 在我的示例中,我要默认选择最后一个选项
$$(\'select#shipping_method option\').last().selected=true;
$$(\'select#shipping_method option\').last().simulate(\'change\');
问候     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...