我正在使用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');
方法,但没有成功。
[更新]
答案 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没有冲突,则重命名该类。它认为这是一种可行的方式和安全