【问题标题】:jQuery: Get return of an onclick-function from an anchorjQuery:从锚点返回 onclick 函数
【发布时间】:2011-07-01 05:53:21
【问题描述】:

有没有办法将像confirm 这样的 onclick 函数的返回值转换为 jQuery 函数?

我的链接有一个 onclick-event 用于确认返回 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
    }
});

【问题讨论】:

    标签: javascript jquery onclick


    【解决方案1】:

    如果您无法更改 HTML 标记,则需要从该节点中删除完整的 onclick inline-handler,并在不显眼的事件处理程序中将其删除。

    这可能看起来像:

    $(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 inline-event 处理程序,因此您无法使用不显眼的绑定事件处理程序来停止或阻止它触发。它总是首先触发,因此您需要完全删除原始事件。

    您实际上不需要存储该函数,您也可以将onclick 设置为null 并在您自己的事件处理程序中重写逻辑。我这样做只是为了方便。

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

    【讨论】:

    • jAndy - 这是一个不错的解决方案。能否请您解释一下: $('a').each(function(underscore, anchor),特别是 function(underscore, anchor) 部分?我'以前从未见过。(评论显然不喜欢下划线)
    • @JackWilson:.each() 方法将两件事传递给它的回调。 index 和实际的 element。由于我在这个 sn-p 中没有应用 index 值,所以我只使用了下划线。我也可以只写“index”或“foobar”。
    【解决方案2】:

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

    编辑: 对不起!错过了您提到它是一个固定结构并且您无法更改它的部分。正在寻找替代方案。

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多