jQuery:从锚点返回onclick-function

时间:2011-03-29 07:39:12

标签: javascript jquery onclick

有没有办法将像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
    }
});

2 个答案:

答案 0 :(得分:5)

如果您无法更改 HTML标记,则需要从该节点中删除完整的onclick内联处理程序,并在不显眼的事件处理程序中删除它。 / p>

这可能看起来像:

$(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并在您自己的事件处理程序中重写逻辑。我这样做只是为了方便。

演示http://jsfiddle.net/em9KP/

答案 1 :(得分:3)

答案真的很简单,可能不是你想要的,但为什么不从锚中删除“onclick”事件,然后处理点击功能中的所有内容?

在中,在函数内创建确认对话框。

<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
    }
});

修改: 抱歉!错过了你提到的部分,它是一个固定的结构,你无法改变它。研究另一种选择。