当前位置: 代码迷 >> JavaScript >> jQuery:从锚点返回onclick-function
  详细解决方案

jQuery:从锚点返回onclick-function

热度:126   发布时间:2023-06-13 12:50:59.0

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

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

演示 : :

非常简单的答案,可能不是你正在寻找的,但为什么不从锚中删除“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
    }
});

编辑 :对不起! 错过了你提到的部分,它是一个固定的结构,你无法改变它。 致力于替代方案。

  相关解决方案