在回调函数中调用href

Posted

技术标签:

【中文标题】在回调函数中调用href【英文标题】:Calling href in Callback function 【发布时间】:2013-02-05 07:33:57 【问题描述】:

我的页面中有一个用于注销的锚标记。

<a href="/logout/" id="lnk-log-out" />

这里我显示了一个弹出窗口,用于通过 jQuery UI 对话框进行确认。

如果用户在对话框中单击“是”,则必须执行链接按钮的默认操作,我的意思是 href="/logout"。

如果没有点击,弹出框应该会消失。

jQuery 代码

 $('#lnk-log-out').click(function (event) 
            event.preventDefault();
            var logOffDialog = $('#user-info-msg-dialog');

            logOffDialog.html("Are you sure, do you want to Logout?");
            logOffDialog.dialog(
                title: "Confirm Logout",
                height: 150,
                width: 500,
                bgiframe: true,
                modal: true,
                buttons: 
                    'Yes': function () 
                        $(this).dialog('close');
                        return true;
                    ,
                    'No': function () 
                        $(this).dialog('close');
                        return false;
                    
                
            );

        );
    );

问题是当用户单击“是”时,我无法触发锚点的 href。

我们该怎么做?

编辑:现在我是这样管理的

'Yes': function () 
                        $(this).dialog('close');
                        window.location.href = $('#lnk-log-out').attr("href");
                    

【问题讨论】:

这似乎与我的答案非常接近!如果你使用“href”,你甚至不需要先关闭对话。 嘿@Murali - 这里没有答案有什么原因吗? :) 【参考方案1】:

在触发“是”时调用的匿名函数中,您希望执行以下操作而不是仅返回 true:

    获取 href(您可以使用 $('selector').attr('href'); 轻松获取) 将window.location.href 执行到您在第 1 点中抓取的网址

如果您希望 a 标记仅用于其目的,请删除任何 preventDefault()stopPropagation()。这里我提供了两种不同的方式:)

不要使用document.location,而是使用window.location.href。你可以看到为什么here。

您在“是”调用中的代码应该看起来像,当然插入了您的代码:

'Yes': function () 
            // Get url
            var href = $('#lnk-log-out').attr('href');
            // Go to url
            window.location.href = href;
            return true; // Not needed
     , ...

注意:感谢以下 cmets 中的 Anthony:使用 window.location.href = ... 而不是 window.location.href(),因为它不是函数!

【讨论】:

window.location.href 是字符串属性,而不是函数。应该是window.location.href = href;,而不是window.location.href(href); 还会在帖子里加上安东尼的解释。【参考方案2】:

我在很多项目中都使用过这个,所以我建议window.location.href

'Yes': function () 
                        $(this).dialog('close');
                         window.location.href="your url"    
                        return true;
                    ,

【讨论】:

以上是关于在回调函数中调用href的主要内容,如果未能解决你的问题,请参考以下文章

C++ template —— 函数对象和回调(十四)

JAVA回调函数

添加回调函数时 JavaScript 停止工作

python 的回调函数

关于回调和递归思想的理解

Delphi回调函数及其使用