我有一个现有的原型代码库,可以完成选择框更改...
我使用了生成(样式化)无序列表的jQuery,我希望将该列表的点击代理到我的选择框...这一切都正常(在selectbox上调用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');
答案 0 :(得分:3)
我最终使用了这个答案建议的原型Event.simulate;
答案 1 :(得分:1)
所有trigger
(或change
,这只是trigger('change')
的快捷方式)所做的就是调用绑定的jQuery事件处理程序。从javascript更改值也不会触发处理程序(想想可能导致的所有无限循环!)。通常,没有可靠的方法从javascript触发事件。您可能应该使用单个框架来执行事件处理。否则,你应该找到Prototype相当于trigger
并手动调用它。
答案 2 :(得分:1)
我通过混合使用jQuery和vanilla Javascript来解决问题
parent_obj.val(selected_idx);
parent_obj.get(0).dispatchEvent(new Event('change'));
答案 3 :(得分:0)
您可能需要在此处查看jQuery.noConflict()
的使用情况,然后确保隔离。 http://api.jquery.com/jQuery.noConflict/
请参阅有关原型事件的帖子:Trigger an event with Prototype
答案 4 :(得分:0)
So, the solution is to use "simulate.js" because you cannot fire an event registered on prototype with jQuery.
After struggling some minutes, i realized that in order to "simulate.js" works on select option, it needs to be selected the option you want first In my example i want to the last option would be selected by default
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
If Not Target.HasFormula Then
If Not Target.Value = vbNullString Then
On Error GoTo ErrHandler
ActiveSheet.Name = "Event" & " " & Target.Value
End If
End If
End If
Exit Sub
ErrHandler:
MsgBox "Error " & Err & ":" & Error(Err)
On Error GoTo 0
End Sub
Greetings