JQuery 1.3.2中的"过多递归"错误

Eli*_*ria 16 javascript jquery

我试图制作一个具有一些动态行为的表单.具体来说,我在div中输入了输入,我希望当用户点击div中的任意位置时,输入就会被选中.我使用的是JQuery 1.2.6,一切正常.

但是,我升级到JQuery 1.3.2并且我得到了一些奇怪的行为.当我点击任何输入时,我会在选择之前得到延迟.我的Firefox错误控制台在JQuery库中给了我几个"太多的递归"错误.我在Internet Explorer 7中尝试了该页面并收到错误消息"对象不支持此属性或方法".

我做错了什么,或者这是JQuery中的错误?有没有人知道一种方法来修复这种行为,而不回到旧版本?我正在使用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>
Run Code Online (Sandbox Code Playgroud)

Ion*_*tan 7

$(function() {
    $(".question div").click(function() {
        var radio = $(this).children("input")[0];
        radio.checked = !radio.checked;
    });
});
Run Code Online (Sandbox Code Playgroud)


gri*_*lix 6

呀,点击事件冒泡...所以当你加注时$(this).children("input").click(),你$(".question div").click()再次加注,依此类推.


Eli*_*ria 0

谢谢你们。我尝试了 Grillix 设置 checked 属性的想法,尽管我必须稍微修改一下语法。这是我所做的:

$(this).children("input").attr("checked", true);
Run Code Online (Sandbox Code Playgroud)

它有效,但我仍然很好奇为什么我以前的方法停止使用 JQuery 1.3.2。我知道事件冒泡行为的变化,但为什么我不能通过在回调中调用“event.stopPropagation()”或“return false”来解决这个问题?