我正在尝试从父窗口打开一个弹出窗口。我有两个tr
,每个tr
都有一个应用按钮,只要点击“应用”按钮,它就会打开一个弹出窗口。
但是不知何故,弹出窗口打开第一个tr只应用按钮意味着一旦我点击第一个tr的应用按钮,弹出窗口就会打开。
但是对于第二个tr应用按钮,弹出窗口不会被打开。
我不确定为什么它不起作用。
以下是我的完整代码。
<html>
<head>
<style>
* { font-family: Trebuchet MS; }
#containerdiv {width:90%; height: 90%; display: none; position: fixed;margin-top: 5%; margin-left: 5%; background:#FFF; border: 1px solid #666;border: 1px solid #555;box-shadow: 2px 2px 40px #222; z-index: 999999;}
/*#containerdiv iframe {display:none; width: 100%; height: 100%; position: absolute; border: none; }*/
#blockdiv {background: #000; opacity:0.6; position: fixed; width: 100%; height: 100%; top:0; left:0; display:none;}
ul { padding:10px; background: #EEE; position: absolute; height: 200px; overflow: scroll;}
ul li {color: #222; padding: 10px; font-size: 22px; border-bottom: 1px solid #CCC; }
h3 { font-size: 26px; padding:18px; border-bottom: 1px solid #CCC; }
#close { top: 13px;position: absolute;right: 13px; padding: 10px; background: #EEE; border: 1px solid #CCC;}
#close:hover { cursor: pointer; background: #E5E5E5 }
#apply { top: 13px;position: absolute;left: 13px; padding: 10px; background: #EEE; border: 1px solid #CCC;}
#apply:hover { cursor: pointer; background: #E5E5E5 }
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script>
function open(url) {
$('#blockdiv').fadeIn();
$('#iframe').attr('src', url);
$('#containerdiv').fadeIn();
}
function close() {
$('#blockdiv').fadeOut();
$('#containerdiv').fadeOut();
}
$(document).ready(function() {
$('ul').css({width: $('#containerdiv').width(),height: $('#containerdiv').height()})
$('#close').click( function() { close() })
$('#JN_apply').click( function() { open($(this).data('url')); })
});
</script>
</head>
<body bgcolor="#F8F8F8">
<table width="850" border="0" align="left" style="table-layout:fixed; font-family:Arial, Helvetica, sans-serif; font-size:12px;" >
<tr bgcolor = "#C4D3D9" align = "center" height = "10" style="font-size:13px">
<th width = "65%">Description</th>
<th width = "10%">Apply</th>
</tr><tr align="left" style="margin-bottom:10px;">
<td style="word-wrap: break-word; border-top:none" valign="top">
<p><span style="font-size:14px; font-weight:bold">
<a href="some_url"> Field Specialist Program </a>
</span>
<br />
</td>
<td>
<input id= "JN_apply" type=button value="Apply" data-url="http://www.yahoo.com/">
</td>
</tr>
<tr align="left" style="margin-bottom:10px;">
<td style="word-wrap: break-word; border-top:none" valign="top">
<p><span style="font-size:14px; font-weight:bold">
<a href="some_url"> Field Specialist Material </a>
</span>
<br />
</td>
<td>
<input id= "JN_apply" type=button value="Apply" data-url="http://www.google.com/">
</td>
</tr>
</table>
<div id="blockdiv"></div>
<div id="containerdiv">
<iframe id="iframe" style="width:100%; height: 100%; outline: 1px solid red;"></iframe>
<span id="close">Close</span>
</div>
</body>
</html>
这是我创建的jsfiddle。在那里你会看到如果你点击第一个Apply按钮然后弹出窗口将打开,但是一旦你点击第二个应用按钮,弹出窗口就不会打开。任何人都能解释一下为什么会这样吗?以及如何解决这个问题?
答案 0 :(得分:2)
您的HTML无效:id
属性应该是唯一的。当您使用选择器#JN_apply"
时,它只选择其中一个按钮(在大多数浏览器中,这将是第一个,如您所见)。
您应该更改每个人使用class
而不是id
:
<input class="JN_apply" type=button value="Apply" data-url="http://www.yahoo.com/">
...然后更改jQuery选择器以匹配:
$('.JN_apply').click( function() { open($(this).data('url')); })
更新了演示:http://jsfiddle.net/p3wgm/3/
另请注意,创建名为open()
和close()
的全局函数并不是一个好主意,因为已有内置函数open()
和close()
,并且您的函数将会覆盖这些。也许openPopup()
和closePopup()
或类似?或者在文档就绪处理程序中定义它们,使它们不是全局的,无论名称如何都可能更好。或者如果它们只是从一个地方调用过(就像你的例子中那样),只需将代码直接放在点击处理程序中即可。