2011-10-21 83 views
1

我有一个HTML按钮,需要检查几个条件,如果他们通过允许默认操作发生。如何在事件处理程序中触发元素的默认事件?

以下在Fi​​refox中工作,但在IE中失败。我在按钮上设置了一个点击处理器:

Ext.get('send').on('click', handleSend, this, { 
    preventDefault: true 
}); 

如果其中一个条件未满足,弹出几个消息框之一。如果所有条件都满足,我从按钮删除点击收听,然后再次单击该按钮:

Ext.get('send').un('click', handleSend, this); 

Ext.getDom('send').click(); 

据我所知,在IE(以及可能的其他浏览器)失败,因为点击()”不是个一个DOM元素的标准函数。

如果默认操作是一个简单的表单提交,我可以在检查通过后执行该操作,但我们将Tapestry 4与一个侦听器一起使用,该操作不会在正常表单提交时执行。

我试着

tapestry.form.submit('composeForm', 'doSend'); 

提交表单,但doSend听众是没有得到调用。

有条件允许默认事件是最好的解决方案,我想出来的,但也有几个选项可能:

  1. 有一些其他的方式来引起挂毯4监听器从JavaScript内部被解雇?
  2. 有什么办法来识别我的Tapestry页面中的正常表单提交,从而触发监听器?

JSFiddle加入

在这种jsfiddle,默认动作是提交表单;当复选框未被选中时,这被阻止。选中时会删除处理程序,但对click()的调用在IE中不起作用。

有没有一种方法来模拟IE中的点击?

更新

在问题的另一个障碍是,我要显示一个“你确定”对话框,所以为了给他们时间来回答,事件必须停止。如果他们单击确定,则需要执行默认操作。 JSFiddle似乎没有像MessageBox这样的ExtJS小部件,所以我不知道如何演示这种行为。

在@伊万的建议,我想

Ext.getDom('send').fireEvent('onclick'); 

但它返回false,表示该事件正在某处取消。然后,我尝试

var evt = document.createEvent("Event"); 
evt.initEvent('click', false, false); 
var cancelled = Ext.getDom('send').fireEvent('onclick', evt); 

但IE9说document.createEvent不存在的,即使这是怎么MSDN说,做到这一点。

+0

有没有办法看到一些演示页面? – Ivan

+0

添加了JSFiddle链接。 –

回答

0

Form组件上有listener参数;从Tapestry 4 doc

当提交表单时要调用的缺省侦听器。仅当另一个侦听器(成功,取消或刷新)未被调用时才调用 。

这个参数设置为我的监听方法,像这样:

<binding name="listener" value="listener:doSend" /> 

导致Tapestry的表单提交

tapestry.form.submit('myFormId'); 

触发听者。

1

如果满足所有条件,我从按钮 删除点击收听,然后再次单击该按钮:

不要。

你还是检查单击处理程序的条件,并呼吁stopEvent有像这样:

Ext.get('send').on('click', handleClick); 

function handleClick(e) { 
    if (condition) { 
     e.stopEvent(); 
    } 
} 
+0

对不起,我的例子不完整。其中一个条件是对“确定”类型的消息框的响应,所以如果他们单击确定,我只能允许默认操作。为了让他们有时间点击按钮,我必须停止该事件。 –

+0

对。对不起,我没有彻底读过这个问题。我猜在这种情况下,正确的方法是手动触发Tapestry侦听器。但是,我对这个框架并不熟悉,所以我不能在这里帮忙。 – user123444555621

+0

您的回答适合我最初提供的信息量,所以我很感激帮助。 –

0

Internet Explorer不支持点击。您应该使用fireEvent方法,例如

Ext.getDom('send').fireEvent('onclick'); 

这应该适用于IE。对于其他浏览器,我猜想点击是可以的。无论如何,如果我应该做类似的任务,我会尝试写一个适配器挂毯和使用tapestry JavaScript库。

+0

我试过这个,但是返回值总是假的,意味着事件由于某种原因被取消。我更新了更多信息的问题。 –

相关问题