【问题标题】:JavaScript: How to change the order of events?JavaScript:如何改变事件的顺序?
【发布时间】:2015-04-08 16:00:55
【问题描述】:

是否可以更改事件顺序以首先使用消息Huh? 调用警报功能,然后才使用“是的!”来调用下一个警报留言?

<div class="elem" onclick="alert('Yeah!')"></div>

我的 jQuery 代码。

$('.elem').click(function () {
    alert('Huh?');
})

jsFiddle 链接:http://jsfiddle.net/84Lyq3n9/

【问题讨论】:

  • 如果你只使用 .click(),那很简单jsfiddle.net/84Lyq3n9/1
  • 但我无法删除内联事件onclick。那么也许还有另一种优雅的方法?
  • 可以改变onclick的值吗?您可以将其引用到一个自定义函数,该函数以您喜欢的任何顺序调用这两个警报。
  • 不,我不能。虽然我只能更改 jQuery 代码。
  • 如果使用 JQuery 或任何其他框架,请不要忘记标签。我给你加了。 (你知道,这样人们就不会在他们并不真正关心的话题上浪费时间)

标签: javascript jquery dom javascript-events


【解决方案1】:

这个怎么样:

var inline_click_handler_src = $('.elem').attr('onclick');
var inline_click_handler = new Function('e', inline_click_handler_src);
$('.elem').removeAttr('onclick');

$('.elem').click(function () {
    alert('Huh?');
    inline_click_handler();
});

[编辑] 或者不用标记内容:

var el = $('.elem').get(0);
var inline_click_handler = el.onclick;
el.onclick = null;

$('.elem').click(function () {
    alert('Huh?');
    inline_click_handler();
});

[再编辑] 如果您的内联点击处理程序使用this,请使用function.call(),设置执行上下文:

var el = $('.elem').get(0);
var inline_click_handler = el.onclick;
el.onclick = null;

$('.elem').click(function () {
    alert('Huh?');
    inline_click_handler.call(el);
});

【讨论】:

  • 不错的解决方案。但也许有一个不删除属性的选项($('.elem').removeAttr('onclick'))?
  • 看起来有可能,我又试了一次并更新了我的答案。请尝试(在 chrome 中为我工作)
【解决方案2】:

但是您可以通过多种方式做到这一点。 首先你可以删除属性“onclick”。你可以用javascript来做。

$('.elem').removeAttr("onclick");

$('.elem').click(function () {
    alert('Whatever you want');
    alert('Huh?');
})

这是一个链接:http://www.w3docs.com/learn-javascript/javascript-events.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多