劫持onchange事件而不干扰原有功能

发布于 2024-12-10 02:40:26 字数 218 浏览 0 评论 0原文

我正在编写一个库,我想将其包含在可能已经使用 onchange 事件的不同页面上 - 有没有办法将我的事件附加到 onchange 而不删除原始事件一?

编辑:

窗口对象上的 onchange 不仅仅是单个元素 - onchange 如 url 中的哈希更改等。抱歉,如果我混淆了它们!

I'm writing on a library I want to include on different pages who might already use the onchange event - is there any way to attach my event to onchange without removing the original one?

EDIT:

onchange on the window object not only a single element - onchange as in a hash change in the url etc. sorry if I confused them!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

要走就滚别墨迹 2024-12-17 02:40:26

如果我是正确的,听起来您想将新代码注入到现有事件中。如果您想要一个纯 JavaScript 解决方案,这可能会对您有所帮助,这里有一个演示该功能的小提琴。 http://jsfiddle.net/VZCve/1/

var element = document.getElementById("myElementId");

element.onchange = (function (onchange) {
  return function(evt) {
    // reference to event to pass argument properly
    evt  = evt || event;

    // if an existing event already existed then execute it.
    if (onchange) {
      onchange(evt);
    }

    // new code "injection"
    alert("hello2");
  }
})(element.onchange);

编辑: 现在标签已更改,并且您在问题中引用了 jQuery

jQuery 将继续使用 jQuery.change() 绑定新函数.

注意以下内容执行分配的所有更改功能

$(document).ready(function () {
  $("#myElement").change(function() { alert('executed') });
  $("#myElement").change(function() { alert('executed again') });
  $("#myElement").change(function() { alert('executed again again') });
});

当您触发选择器中元素的更改事件时,您将收到 3 个警报。

请注意,事件触发的顺序取决于每个函数绑定到元素的顺序。

这是一个简单的小提琴,演示了 jQuery http://jsfiddle.net/VZCve/ 中的功能

If I'm correct it sounds like you want to inject new code into an existing event. This may help you if you want a pure JavaScript solution and here is a fiddle demonstrating the feature. http://jsfiddle.net/VZCve/1/

var element = document.getElementById("myElementId");

element.onchange = (function (onchange) {
  return function(evt) {
    // reference to event to pass argument properly
    evt  = evt || event;

    // if an existing event already existed then execute it.
    if (onchange) {
      onchange(evt);
    }

    // new code "injection"
    alert("hello2");
  }
})(element.onchange);

EDITED: Now that the tags are changed and you are reference jQuery in your Question

jQuery will continue to bind new functions using jQuery.change().

note the following will execute all change functions assigned

$(document).ready(function () {
  $("#myElement").change(function() { alert('executed') });
  $("#myElement").change(function() { alert('executed again') });
  $("#myElement").change(function() { alert('executed again again') });
});

When you trigger the change event for the element in the selector you will receive 3 alerts.

Note the order of the events firing is dependent on the order each function was bound to the element.

Here is a simple fiddle demonstrating the functionality in jQuery http://jsfiddle.net/VZCve/

暮光沉寂 2024-12-17 02:40:26

使用 jQuery 的 .change() 函数分配 onchange 处理程序不会覆盖现有的 onchange 事件(或其他 jQuery 分配的处理程序)。请参阅此处的工作演示:http://jsfiddle.net/nrabinowitz/EyKdm/

Using jQuery's .change() function to assign an onchange handler will not override existing onchange events (or other jQuery-assigned handlers). See a working demonstration here: http://jsfiddle.net/nrabinowitz/EyKdm/

帝王念 2024-12-17 02:40:26

较新的浏览器有一个 addEventListener 可以做到这一点,但是
dean.edwards 解决方案更好

,与旧版浏览器更

兼容还使用 Costem 事件处理程序来调用函数数组(正确完成后,您可以处理子函数的返回值来决定是否要运行下一个函数,也event

if(typeof element.onclickfunctions == "undefined"){
  element.onclickfunctions = [];
}
element.onclickfunctions.push( function(event){return Myfunct(event);});//or var
element.onclick = function(event){
  for(x in element.onclickfuncitons){
    if(! x(event)){
      break;
    }
  }
};

代码的 couts 未经过测试,请在投反对票之前发表评论

Newer browsers have an addEventListener which can do it but
dean.edwards solution is better

is more compatible with older browsers

you could also use a costem eventhandeler(s) whitch call array's of functions (done properly you could handle the return value of the sub-functions to decide if you want to run the next function, also couts for event

if(typeof element.onclickfunctions == "undefined"){
  element.onclickfunctions = [];
}
element.onclickfunctions.push( function(event){return Myfunct(event);});//or var
element.onclick = function(event){
  for(x in element.onclickfuncitons){
    if(! x(event)){
      break;
    }
  }
};

code not tested please comment before downvote

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文