2

我正在使用 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>

从我找到之前的代码的同一个问答.die('click');中,我也尝试了该方法但没有成功。

[更新]

我忘了添加 DOM 屏幕截图。
dom 截图

4

5 回答 5

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'对象的静态父对象的选择器。

于 2012-12-11T04:32:41.460 回答
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;
}
于 2012-12-11T04:45:25.017 回答
1

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

于 2012-12-11T04:35:19.647 回答
1

死是最好的解决办法。但在你调用它之前,你必须确保它被称为 AFTER plugin bind click it with live。

为此,您可以使用插件提供的一些回调。您还可以在下载脚本时添加侦听器,并在使用 die() 之前添加少量超时,但这在超时和插件绑定单击事件之间存在竞争问题。使用 preventImmediateDefault() 你跑到同一场比赛 - 你会比插件更快吗?

于 2013-05-16T11:13:48.960 回答
0

您可以通过使用 css 在此按钮上放置一个隐藏层来尝试一些技巧,或者如果它与您的 css 不冲突,则重命名该类。它认为这是一种可能且安全的方式

于 2012-12-11T04:35:22.497 回答