代码之家  ›  专栏  ›  技术社区  ›  Josh Andreas Rehm

有什么方法可以使用元素observer将观察者添加到队列的头部?

  •  0
  • Josh Andreas Rehm  · 技术社区  · 15 年前

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

    我有一个javascript应用程序创建一个提交 <input> 并使用原型元素观察输入的点击事件。对于一个使用这个应用程序的特定站点上的几个特定页面,我需要在单击按钮时正常执行的代码之前应用一些额外的业务逻辑。

    我是否可以使用elemen observe添加新的事件处理程序 之前 现有的事件处理程序,因此如果不满足这些新条件,我可以停止事件?如果没有,我可能会通过让应用程序触发一个特定的 beforeTakingAction 事件并为其添加一个侦听器,以防止应用程序执行其操作,但这比这个简单问题所需的复杂,并且只需要为一个用户重写共享应用程序的一部分…

    1 回复  |  直到 15 年前
        1
  •  0
  •   artlung    15 年前

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

    所以如果你的元素是:

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

    也许您会先解除现有处理程序的绑定?

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

    然后在那里附加新的逻辑。也许现有的逻辑是以这样一种方式封装的,它可以很容易地反弹?

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

    我想知道是否有一种方法可以将现有事件捕获到一个可以重新附加的对象中。


    另一种更狡猾的方法可能是:

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

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


    更新

    另一个需要注意的是 submit 事件也被观察到了-如果这个事件也有一些附加的东西(比如,为了验证),那么这也需要处理。