[asp.net] 使用jQuery以编程方式触发Javascript中的事件



Answers

我用一个补丁解决了这个问题:

    window.ValidatorHookupEvent = function(control, eventType, body) {
        $(control).bind(eventType.slice(2), new Function("event", body));
    };

更新:我已经将问题提交给MS( 链接 )。

Question

当IE中的用户触发事件时,它被设置为window.event对象。 查看触发事件的唯一方法是访问window.event对象(据我所知)

如果事件是以编程方式触发的,就像在通过jQuery触发事件时一样,这会导致ASP.NET验证器出现问题。 在这种情况下, window.event对象存储上次用户触发的事件。

当以编程方式激发的onchange事件中附带有一个ASP.NET验证程序的文本框时,验证中断是因为它正在查看触发最后一个事件的元素,而不是验证程序所用的元素。

有没有人知道这个方法? 这似乎是一个可以解决的问题,但是从网上看,大多数人只是想方设法忽略问题而不是解决问题。

解释我在做什么:
我在一个文本框上使用了一个jQuery时间选择器插件,它也有两个与之关联的ASP.NET验证器。 当时间改变了,我正在使用更新面板回发到服务器动态地做一些事情,所以我需要触发onchange事件以触发该文本框的回发。

jQuery时间选择器通过创建隐藏的无序列表来操作,该列表在单击文本框时变得可见。 当单击其中一个列表项时,将通过jQuery的change()方法以编程方式为文本框触发“更改”事件。

由于事件的触发器是一个列表项,所以IE将列表项视为事件的来源,而不是文本框。

我不太关心这个ASP.NET验证器,一旦文本框发生变化,我只需要“ change ”事件来处理,所以我的回发事件被称为文本框。 问题是验证器在IE中抛出一个异常,从而阻止任何事件被触发。

火狐浏览器(和我假设其他浏览器)没有这个问题。 只有IE由于不同的事件模型。 有没有人遇到这个,看到如何解决它?

我发现这个问题报告了其他几个地方,但他们没有提供解决方案:




这就是我解决一个类似的问题。 为datepicker写了一个onSelect()处理程序。 链接文本在该函数中,调用__doPostBack('textboxcontrolid','')。 这触发了文本框的部分回传到服务器,依次调用验证器。




在使用javascript启动事件之前,请考虑设置隐藏字段_EVENTTARGET的值。 您需要将其设置为服务器端标识(用客户端ID中的$替换下划线),以便服务器了解它。 我这样做的模拟按钮点击,以便服务器端可以确定哪个OnClick方法触发结果回发 - Ajax与否,并不重要。




Links