gpt4 book ai didi

jquery - 当我触发事件时,如何将参数传递给事件处理程序?

转载 作者:行者123 更新时间:2023-12-01 03:52:56 25 4
gpt4 key购买 nike

在脚本#中,我有以下内容:

jQuery.Select("#someId").Trigger("item-added", new object[]{"ball"} ); 

这会编译成以下 Javascript:

$('#someId').trigger('item-added', [ 'ball' ]);

上面的代码工作正常。问题在于声明一个可以接收参数数组的事件处理程序。

为了让我的处理程序接收参数数组,它必须具有如下签名:

public void OnItemAdded(jQueryEvent jqe, Object[] args)

但是,唯一可用的类型是:

public delegate void jQueryEventHandler(jQueryEvent e)

因此,当调用处理程序时,找不到参数。

我已经在 jQuery api 文档 ( http://api.jquery.com/trigger ) 上阅读了有关将参数传递给事件处理程序的其他方法,并且它们在 script# 中似乎不可能。

最佳答案

添加 DuckMaestro 的建议 -

Script.jQuery 的源代码位于 github 上...它们在那里,因此人们可以更改它,而不会被阻止,并且不必求助于 InvokeMethod、Script.Literal 和其他此类次优解决方法。

签名与开始时不同的原因是每个事件处理程序不需要在不需要时在其签名中定义额外的参数。

选项 1 -

创建不同的委托(delegate)签名 - 例如 jQueryEventHandler。然后创建使用新签名的 Bind 和 Trigger 重载。这并不难,尤其是。如果您查看现有的实现源作为引用。

选项 2 -

使用 http://api.jquery.com/trigger 中的示例建议的其他模式.

var event = jQuery.Event("item-added");
event.item = "ball";
$("#someid").trigger(event);

具体地向 jQueryEvent 添加属性,然后创建触发事件的派生类,根据您的特定场景为其设置属性。然后在事件处理程序中将 jQueryEvent 强制转换回特定类型。

这样做的好处是它与 DOM 一致...就您使用 document.createEvent 和dispatchEvent 执行的操作而言。因此,我更喜欢这个选项,除了它不需要为每个特定场景重载绑定(bind)/触发之外。

您现在遇到的一件事是 jQueryEvent 本身现在是密封的,但我很高兴将其解封以支持这些场景(请务必在 github 上记录错误,以便可以跟踪它)。在解锁的同时,您拥有将其解锁的​​资源。

如果您确实不想重建 Script.jQuery,可以使用以下临时解决方法(直到您拥有可以开始派生的构建版本):

jQueryEvent e = jQuery.Event("item-added");
Script.Literal("{0}.item = {1}", e, "ball");

关于jquery - 当我触发事件时,如何将参数传递给事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com