【发布时间】:2015-04-06 17:16:48
【问题描述】:
我正在使用 jQuery 单击事件处理程序将单击事件添加到我的 HTML 中存在的所有锚标记。 但是点击事件只起作用一次。基本上 onclick 操作我正在显示一个弹出窗口,它只显示一次。如果我再次单击它不会显示。
下面是我的代码:
function onClickLoginPopup (anchor)
{
var url = anchor.href;
var head = document.getElementsByTagName('head')[0];
var mainPopup = $('#popupMain');
if (mainPopup.length == 0 && mainPopup.is(":visible") == false)
{
// load popup.css
var styleSheet = document.createElement('link');
styleSheet.href = 'http://192.168.1.6:8080/OtherDomain/css/mpw.css?' + new Date();
styleSheet.rel = "stylesheet";
head.appendChild(styleSheet);
$.ajax({
url: "http://192.168.1.6:8080/OtherDomain/popup.html",
data: '',
cache: false,
success: function(data){
document.body.innerHTML += data;
if($('#popupMain').length > 0) {
alert('ShowPopup');
showPopup();
}
}
});
}
}
function addClickEventListenerToAllAnchorTag()
{
var anchors = document.getElementsByTagName("a");
for(var i = 0; i < anchors.length; i++)
{
var anchor = anchors[i];
//console.log(anchor);
anchors[i].addEventListener("click",function(event)
{
console.log(this.href + ' clicked');
onClickLoginPopup(anchor);
}, false);
}
}
function initialize(){
var head = document.getElementsByTagName('head')[0];
var host = "192.168.1.6";
var server = "http://" + host + ":8080/OtherDomain/";
var req = document.createElement("script");
req.src = server + "js/jquery.js?" + new Date();
req.type = "text/javascript";
head.appendChild(req);
// load Popup.js
var popupJs = document.createElement("script");
popupJs.type = 'text/javascript';
popupJs.src = "http://192.168.1.6:8080/OtherDomain/js/Popup.js?" + new Date();
head.appendChild(popupJs);
addClickEventListenerToAllAnchorTag();
}
window.onload = initialize;
在 window.onload 上,我正在调用初始化函数,该函数基本上加载我的弹出脚本和 jQuery,它正在调用 addClickEventListenerToAllAnchorTag() 函数,该函数只是从 HTML 中获取所有锚标记并向其添加单击事件侦听器。在里面,我正在调用 onClickLoginPopup() 函数,该函数是 ajax 调用来获取远程元素。在 showPopup() mehtod 调用下面的代码:
Popup.js
function showPopup() {
console.log('In showPopup');
//$('#popupMain').show();
document.getElementById('popupMain').style.display = 'block';
}
但不知何故,此弹出窗口仅显示一次,并且无法在随后的点击中显示。 请帮忙。
【问题讨论】:
-
第二次点击
mainPopup.is(":visible")的值是多少? -
多么可怕的 DOM 和 jQuery 组合。另外我怀疑您需要将 preventDefault 添加到锚点
-
@mininoz 第二次函数没有被调用
-
@mplungjan 添加了 preventDefault 但没有运气。
标签: jquery popup onclicklistener