如何拦截jQuery实时点击事件?

时间:2012-12-11 04:19:53

标签: jquery wordpress

我正在使用WordPress并使用在页脚加载其Javascript文件的库,使用<script src>
这是我需要阻止的代码:

var $ =jQuery.noConflict();
jQuery(document).ready(function($) 
{
    jQuery('.at-delete_image_button').live('click', function(e)
    {
        data = { /* ... */ };
        $.getJSON(ajaxurl, data, function(response) { /* ... */ });
        return false;
    });
});

<script src>之后,我正在打印以下但不起作用:

<script type="text/javascript">
jQuery(document).ready( function($) 
{
    $('.at-delete_image_button').live('click', function (e){
        e.preventDefault();
        e.stopPropagation();
    });
});
</script>

same Q&A我找到了上面的代码,我也尝试了.die('click');方法,但没有成功。

[更新]

我忘了添加DOM截图 dom screenshot

5 个答案:

答案 0 :(得分:3)

您不能preventDefault()来自.live()处理程序,因为事件在到达.live()处理程序时已经传播。您需要直接在实际对象本身或父对象上使用处理程序(不使用.live())。

如果存在未动态创建的父对象,则可以停止该父对象的传播,然后它将不会到达.live()对象上的document处理程序。

你可以这样做:

jQuery(static parent selector).on('click', '.at-delete_image_button', function(e) {
    // stop propagation up the parent chain so the click event never gets 
    // to the `document` object where .live() would process it
    e.stopPropagation();
});

static parent selector是一个匹配所有'.at-delete_image_button'个对象的静态父级的选择器。

答案 1 :(得分:2)

我从另一个方向来到它,并挂钩进入AJAX动作并取消它。

add_action('wp_ajax_their_action', 'my_cancel_their_action', 1);
add_action('wp_ajax_nopriv_their_action', 'my_cancel_their_action', 1);

function my_cancel_their_action() {
    exit;
}

答案 2 :(得分:1)

您必须使用e.stopImmediatePropagation()来阻止相同元素的其他处理程序执行。请记住,您自己的处理程序必须在之前写

答案 3 :(得分:1)

Die是最好的解决方案。但在你打电话之前,你必须确定它被称为AFTER插件绑定点击它与live。

要实现这一点,您可以使用插件提供的一些回调。您还可以在下载脚本时添加侦听器,并在使用die()之前添加一点时间,但这在您超时和插件绑定单击事件之间的竞争中存在缺陷。使用preventImmediateDefault()你运行到同一个竞赛 - 你绑定会比插件更快吗?

答案 4 :(得分:0)

你可以尝试一些技巧,使用css在这个按钮上放置一个隐藏层,或者如果它与你的css没有冲突,则重命名该类。它认为这是一种可行的方式和安全