jQuery change()没有激活原型事件处理程序

时间:2011-03-18 11:40:26

标签: jquery javascript-events prototypejs

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

我使用了生成(样式化)无序列表的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');

5 个答案:

答案 0 :(得分:3)

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

Trigger an event with Prototype

答案 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