Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jQuery在单击时获取锚href值?_Jquery - Fatal编程技术网

如何使用jQuery在单击时获取锚href值?

如何使用jQuery在单击时获取锚href值?,jquery,Jquery,假设我有一个这样的锚: <a onClick="return confirm('Sure?')" href="http://stackoverflow.com/">Click here</a> 我是否可以获取href的值?”http://stackoverflow.com/当我点击“点击这里”时?请记住,我没有其他属性可以帮助,例如id或名称 我正在覆盖确认功能,如果用户单击确定,我需要将用户重定向到锚中提供的位置,如下所示: window.confirm = fu

假设我有一个这样的锚:

<a onClick="return confirm('Sure?')" href="http://stackoverflow.com/">Click here</a>

我是否可以获取href的值?”http://stackoverflow.com/当我点击“点击这里”时?请记住,我没有其他属性可以帮助,例如id或名称

我正在覆盖确认功能,如果用户单击确定,我需要将用户重定向到锚中提供的位置,如下所示:

window.confirm = function(msg) {
      var targetUrl = jQuery(this).attr("href");
      jQuery("#alert_box").dialog({
         autoOpen: false,
         show: "slide",
         modal: true,
         width: 400,
         resizable:false,
         title: '<img src="icons/confirm.png" /> Confirm!',
         buttons: { "Cancel": function() { 
                        jQuery(this).dialog("close");                       
                    },
                 "OK": function() { 
                        //jQuery(this).dialog("close");
                        jQuery(location).attr('href', targetUrl);
                    }
                   }
      });

      jQuery("#alert_box").html(msg);
      jQuery("#alert_box").dialog("open");
      return false;
  }
window.confirm=函数(msg){
var targetUrl=jQuery(this.attr(“href”);
jQuery(“警报框”)。对话框({
自动打开:错误,
放映:“幻灯片”,
莫代尔:是的,
宽度:400,
可调整大小:false,
标题:“确认!”,
按钮:{“取消”:函数(){
jQuery(this.dialog)(“close”);
},
“OK”:函数(){
//jQuery(this.dialog)(“close”);
jQuery(location).attr('href',targetUrl);
}
}
});
jQuery(“#警报框”).html(msg);
jQuery(“警报框”)。对话框(“打开”);
返回false;
}

任何帮助都将不胜感激

要重定向用户,请使用:

window.location.href = targetUrl;
而不是:

jQuery(location).attr('href', targetUrl);
此外,删除内联JavaScript也是一个好主意,例如:

<a class="confirm" href="http://www.example.com">..</a>

// script.js
$('a.confirm').click(function(e) {
    e.preventDefault();
    if (confirm('Are you sure?')) {
        window.location.href = $(this).attr('href');
    }
});

仅供参考,如果您将代码包装在
(函数($){…})(jQuery)中
您可以每次使用
$
而不是编写
jQuery
,即使您使用
$.noConflict()
来还原全局
$
变量。替换
窗口。confirm()
不是一个好主意。原始函数不是异步的,即如果(确认(…),您可以执行
——但是,在替换函数中不可能执行相同的操作。虽然monkeypatching有时是好的,但如果monkeypatching在不知道函数已被替换的情况下破坏了代码,则是不好的。感谢Tarkus和ThiefMaster的回复。首先,我想说的是,我很清楚,使用内联javascript不是一个好习惯,覆盖confirm也不是一个好主意,正如上面提到的ThiefMaster。然而,我刚刚承担了一个大项目,几乎有数千个文件,这使得它不可能通过每个人,并改变它的方式应该是!其次,在我上面给出的示例中,“targetUrl”返回为空白,这意味着jQuery(this.attr(“href”);这不管用!知道为什么吗??!怎么样:在确认函数中再添加一个参数。我很乐意,但在这么短的时间内,没有机会浏览所有文件并添加“this”。如果我能够,我会添加一个“class”或“id”属性,这将使生活变得更加轻松,但我认为有一个短期的解决方法,我现在可以侥幸逃脱:-(无论如何,我非常感谢你们的时间、贡献和建议。
<a onclick="return confirm(this, 'Sure?')" href="...">...</a>

// script.js
function confirm(e, msg) {
    var targetUrl = $(e).href('attr');
    // ...
}