问题描述
有没有办法将像confirm
这样的onclick函数的返回值转换为jQuery函数?
我有链接,其中有一个onclick事件进行确认,返回true或false:
<a onclick="return confirm('Sure?');" class="delete" href="delete.php">Delete</a>
这是一个给定的结构,我没有可能改变它。 但我想做这样的事情:
$('a.delete').click(function() {
if (confirm_from_onclick == true) {
//do some more before really returning true and following the link
}
});
1楼
如果您无法更改HTML标记 ,则需要从该节点中删除完整的onclick
内联处理程序,并在不显眼的事件处理程序中删除它。
这可能看起来像:
$(function() {
$('a').each(function(_, anchor) {
var onclk = anchor.onclick; // store the original function
anchor.onclick = null; // delete/overwrite the handler
$(anchor).bind('click', function() {
if( onclk() ) {
// do something
}
return false; // call stopPropagation() + preventDefault()
});
});
});
由于您正在处理onclick
内联事件处理程序,因此无法阻止或阻止使用不受干扰的绑定事件处理程序进行触发。
它将始终首先触发,因此您需要完全删除原始事件。
您不需要存储该函数,您也可以将onclick
设置为null
并在您自己的事件处理程序中重写逻辑。
我这样做只是为了方便。
演示 : :
2楼
非常简单的答案,可能不是你正在寻找的,但为什么不从锚中删除“onclick”事件,然后处理click函数内的所有内容?
如,在函数内创建确认对话框。
<a class="delete" href="delete.php">Delete</a>
$('a.delete').click(function(e) {
e.preventDefault();
if (confirm('Sure?')) {
//do some more before really returning true and following the link
}
});
编辑 :对不起! 错过了你提到的部分,它是一个固定的结构,你无法改变它。 致力于替代方案。