如何从每个动态生成tr打开弹出窗口

时间:2013-07-28 01:28:24

标签: javascript jquery html

我正在尝试从父窗口打开一个弹出窗口。我有两个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按钮然后弹出窗口将打开,但是一旦你点击第二个应用按钮,弹出窗口就不会打开。任何人都能解释一下为什么会这样吗?以及如何解决这个问题?

1 个答案:

答案 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()或类似?或者在文档就绪处理程序中定义它们,使它们不是全局的,无论名称如何都可能更好。或者如果它们只是从一个地方调用过(就像你的例子中那样),只需将代码直接放在点击处理程序中即可。