Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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
Javascript 通过jquery每个方法弹出新窗口时出现问题(打开多个窗口)_Javascript_Jquery_Window - Fatal编程技术网

Javascript 通过jquery每个方法弹出新窗口时出现问题(打开多个窗口)

Javascript 通过jquery每个方法弹出新窗口时出现问题(打开多个窗口),javascript,jquery,window,Javascript,Jquery,Window,我已经创建了一个JS提琴来说明这个问题 我有一些宣传片/模块,我正在通过JS将它们变成大目标链接。基本上,整个promo/模块成为一个链接,而不仅仅是一个小小的子锚点/html文本链接。您可以单击促销/模块上的任意位置,以跟随子href 我需要其中一些来在一个新窗口中打开href——我只是连接到这个窗口的target属性。如果链接具有目标属性,则意味着弹出一个新窗口。当我做一些测试和点击时,我遇到了打开多个窗口的问题 在jsfiddle中,第一个模块跟随窗口中的href。第二个和第三个应该弹出新

我已经创建了一个JS提琴来说明这个问题

我有一些宣传片/模块,我正在通过JS将它们变成大目标链接。基本上,整个promo/模块成为一个链接,而不仅仅是一个小小的子锚点/html文本链接。您可以单击促销/模块上的任意位置,以跟随子href

我需要其中一些来在一个新窗口中打开href——我只是连接到这个窗口的target属性。如果链接具有目标属性,则意味着弹出一个新窗口。当我做一些测试和点击时,我遇到了打开多个窗口的问题

在jsfiddle中,第一个模块跟随窗口中的href。第二个和第三个应该弹出新窗口。它们不是很正常,有时一个可以正常工作,但是当你关闭新窗口并再次单击链接时,它会在2新窗口中弹出url


有人有什么想法吗?

你把事情弄得比实际情况复杂得多。相反,在JS中执行以下操作:

$('.promoBigLink').click(function () {
  window.open($(this).find('a').attr('href'));
});
此代码使用
promoBigLink
类获取所有元素,并打开它在其子元素中找到的第一个锚元素的
href

当然,假设每个
promoBigLink
中的第一个锚元素是应该访问的锚元素。将CSS样式移动到
标记或单独的文件中。您可能必须处理有人单击锚定标记本身的情况


希望这有帮助

一个可能更好的解决方案是向上移动
A
,使其完全填满该区域。如果你给那
一个
文本装饰的CSS:none
,它看起来是一样的,没有怪癖。它也更容易访问,因为你现在也可以右击整个区域来复制URL,等等

您需要将
div
包装成一个新的
a
,它现在代表链接和目标

(函数($){
$.fn.promoBigLink=函数(){
返回此.wrap(函数(){
var href=$(this).find(“a”).attr('href'),//save href+target
target=$(this.find(“a”).attr(“target”);
//使用href+target将div包装到新的a中,并添加类
返回$(“”,{href:href,
target:target}).addClass(“biglink”);
});
};
})(jQuery);
$(函数(){
$('div.promoBigLink').promoBigLink();
});

问题在于,每当用户将鼠标悬停在div上时,您就会附加另一个click事件侦听器!请在控制台中查看并注意“附加click listener”调用的频率


Kelly的解决方案要简单得多,但是您的实现的问题正如我所描述的。修复了此问题。

问题在于每次将鼠标悬停在链接上时,它都在读取单击事件

$(this).unbind('click');
您可以在悬停的out侦听器中使用jquery unbind来解除click事件的绑定

$(this).unbind('click');
但是,最好使用其他一些建议重构代码