为什么 Internet Explorer 不能运行这个简单的 jQuery?
我正在运行一个非常简单的 jQuery 脚本来获取表中复选框选择的所有电子邮件。该表看起来像这样:
<table>
<tbody>
<tr>
<td>
<input type="checkbox" value="MD5HASH" />
</td>
<td>
First Name
</td>
<td class="email">
Email Address
</td>
</tr>
</tbody>
</table>
我的 jQuery 看起来像这样:
$("#submitButton").click(function() {
var output = [];
$("table tbody tr:has(input:checkbox:checked)").each(function() {
var email = $('td.email', $(this)).text();
if (validate(email) && output.indexOf(email) == -1)
output.push(email);
});
$("#emails").val(output.join(", "));
});
function validate(email) {
return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.test(email);
}
这在 IE 中失败了,但在其他地方都有效。
table tbody tr:has(input:checkbox:checked)
选择器没有匹配任何内容。- 对 validate 的调用会引发
Object Expected
错误。
为什么!? jQuery 不是被设计为跨浏览器和可移植的吗?
I'm running a really simple jQuery script to grab all emails selected by checkboxes in a table. The table looks like this:
<table>
<tbody>
<tr>
<td>
<input type="checkbox" value="MD5HASH" />
</td>
<td>
First Name
</td>
<td class="email">
Email Address
</td>
</tr>
</tbody>
</table>
My jQuery looks like this:
$("#submitButton").click(function() {
var output = [];
$("table tbody tr:has(input:checkbox:checked)").each(function() {
var email = $('td.email', $(this)).text();
if (validate(email) && output.indexOf(email) == -1)
output.push(email);
});
$("#emails").val(output.join(", "));
});
function validate(email) {
return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.test(email);
}
This fails miserably in IE, but works everywhere else.
- The
table tbody tr:has(input:checkbox:checked)
selector matches nothing. - The call to validate throws a
Object expected
error.
WHY!? Isn't jQuery designed to be cross-browser and portable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Internet Explorer (< 9) 没有
Array.prototype .indexOf
。尝试使用 jQuery 的$.inArray
(它是跨浏览器的,并且会实际上使用 Array.prototype.indexOf(如果存在):-P)。Internet Explorer (< 9) doesn't have
Array.prototype.indexOf
. Try using jQuery's$.inArray
instead (it's cross browser and will actually useArray.prototype.indexOf
if it exists :-P).给输入一个类并直接定位它...
然后在你的js中定位已检查的类,如下所示:
give the input a class and target it directly...
Then target the checked ones in your js like this: