我正在尝试制作一个具有一些动态行为的表单。具体地说,我的输入在div中,我希望当用户在div中的任何位置单击时,输入都会被选中。我使用的是JQuery 1.2.6,一切运行正常。
然而,我升级到了JQuery 1.3.2,我得到了一些奇怪的行为。当我点击任何一个输入时,在它被选中之前我会得到一个延迟。我的Firefox error控制台在JQuery库中给出了几个“太多的递归”错误。我在Internet Explorer7中尝试了该页面,但得到一个错误消息:"Object不支持此属性或方法“。
是我做错了什么,还是这是JQuery中的一个bug?有没有人知道一种方法来修复这种行为,而不是回到旧版本?我使用的是Firefox 3.0.7,以防万一。下面是我用来说明这个问题的一个简单示例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>quiz test</title>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
</head>
<body>
<div class='question'>Favorite soda?
<div><input type='radio' name='q' value='A' id='a'><label for='a'>Coke</label></div>
<div><input type='radio' name='q' value='B' id='b'><label for='b'>Pepsi</label></div>
</div>
<script type="text/javascript">
$(function() {
$(".question div").click(function() {
$(this).children("input").click();
});
});
</script>
</body></html>
发布于 2009-03-12 19:11:17
谢谢你们所有人。我尝试了grillix关于设置checked属性的想法,尽管我必须稍微修改一下语法。下面是我所做的:
$(this).children("input").attr("checked", true);
它可以工作,但我仍然很好奇,为什么我以前的方式停止了对JQuery 1.3.2的工作。我知道事件冒泡行为的变化,但为什么我不能通过在回调中调用"event.stopPropagation()“或"return false”来解决这个问题呢?
发布于 2009-03-12 18:23:59
$(function() {
$(".question div").click(function() {
var radio = $(this).children("input")[0];
radio.checked = !radio.checked;
});
});
发布于 2009-03-12 18:26:35
ya,单击event bubbles…因此,当您提高$(this).children("input").click()
时,您将再次提高$(".question div").click()
,依此类推。
https://stackoverflow.com/questions/639862
复制相似问题