有没有办法使用Element#observe将观察者添加到队列的头部?

时间:2010-05-06 20:04:54

标签: javascript events queue observer-pattern prototypejs

这可能是不可能的,但在我重写部分应用程序之前,我想问......

我有一个JavaScript应用程序,它创建一个提交<input>并使用Prototype的Element#observe函数观察输入的click事件。对于使用此应用程序的某个特定网站上的一些特定页面,我需要在单击按钮时正常执行的代码之前应用一些额外的业务逻辑。

有什么方法可以使用Elemen#observe在现有事件处理程序之前添加我的新事件处理程序,所以如果不满足这些新条件,我可以停止事件吗?如果不是,我可能会通过让应用程序触发特定的beforeTakingAction事件并添加一个阻止应用程序采取行动的侦听器来解决这个问题,但这比这个简单的问题要复杂得多,并且只需要为一个用户重写部分共享应用程序......

1 个答案:

答案 0 :(得分:0)

我能想到的第一种方法是取消绑定事件,然后添加所有新事件:

所以如果你的元素是:

<input type="submit" value="Go!" id="mySubmit" />

也许你会先绑定现有的处理程序?

$('mySubmit').stopObserving('click');

然后在那里附加新的逻辑。也许现有的逻辑被封装成可以轻易反弹的方式?

Event.observe('mySubmit', 'click', function(){
  // new logic here
  // old logic next
);

我有兴趣知道是否有办法将现有事件捕获到可以重新附加的对象中。


另一种狡猾的方式可能是:

  • 隐藏现有按钮
  • 在另一个按钮
  • 之后添加一个唯一ID的新按钮
  • 该按钮附加了新的业务逻辑
  • 该按钮触发现在隐藏按钮的点击事件

您将获得新功能,旧功能并提交表单。从理论上讲。


<强>更新

另一件需要注意的事情是,可能还会发现submit事件 - 如果该事件还附加了某些内容(例如,用于验证),那么也需要处理。