首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jquery绑定似乎失败了。

Jquery绑定似乎失败了。
EN

Stack Overflow用户
提问于 2012-04-16 19:13:58
回答 3查看 94关注 0票数 0

我目前正在编写一个jQuery脚本,这给我带来了很多麻烦。我不是这个框架的专家,但我过去曾成功地使用过它。

我正在尝试设置一个子表单的子形式。也就是说,用户正在填写一份问卷,根据用户输入的附加表单字段显示,在这种情况下,基于该输入可以显示更多字段。

因此,在本例中,我加载了一个脚本,该脚本搜索控制元素并将其绑定到它们的更改事件。此方法适用于第一个表单字段,但不适用于另一个表单字段。内容与html的其余部分一起加载,而不是通过ajax加载。真正奇怪的是,使用调试器并查看控制台,我可以知道下面的脚本找到了我想要的元素,并尝试调用change(),但是事件永远不会触发!

代码语言:javascript
运行
复制
$('td.subFormYesControl input.CodebtorParentQuestion').each(function() {
    console.log("Hit");
    //alert($(this).prop('class'));
    $(this).on("change", function() {
        if ($(this).val() == "1") {
            $(this).parents('tbody').eq(0).children('tr.subFormRow').show();
            $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').show();
        } else {
            $(this).parents('tbody').eq(0).children('tr.subFormRow').hide();
            $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').hide();
        }
    });
});​

我一直在做一些试验和错误测试很少运气。如果我将它从包装在$(document).ready()中更改为$(window).load(),它可以在FF中工作,但不能在IE中工作。

有人知道会发生什么事吗?

编辑:谢谢你的帮助!在我使用的实现中有大量生成的html,下面是我试图使用的控件的父元素。让我知道,如果更多将是有益的!

代码语言:javascript
运行
复制
<td class="subFormYesControl"><input type="radio" value="1" id="c1_CodebtorsParent[0]0" class="CodebtorParentQuestion" name="c1_CodebtorsParent[0]"><label for="c1_CodebtorsParent[0]0">Yes</label><br><input type="radio" checked="checked" value="0" id="c1_CodebtorsParent[0]1" class="CodebtorParentQuestion" name="c1_CodebtorsParent[0]"><label for="c1_CodebtorsParent[0]1">No</label><br></td>

编辑2:它似乎变得更奇怪,但我想我找到了一条线索。如果我添加一个简单的警告,如下所示:

代码语言:javascript
运行
复制
        alert($(this).prop('class'));
        $('td.subFormYesControl input.CodebtorParentQuestion').each(function() {


    $(this).on("change", function() {
        console.log($(this).length);
                    if($(this).val() == "1") {
                        $(this).parents('tbody').eq(0).children('tr.subFormRow').show();
                        $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').show();
                    } else {
                        $(this).parents('tbody').eq(0).children('tr.subFormRow').hide();
                        $(this).parents('tbody').eq(0).siblings('tbody.CodebtorSubForm').hide();
                    }                    
            });
        });

代码看起来很有效!解除警报,它就停止工作了!有什么想法吗?

谢谢大家的帮助。我正在准备弹琴,并删除了一些看似无关的插件。当我删除其中的一个智能工具时,代码开始在所有浏览器中正常工作。我已经通过了测试,甚至能够将代码推回document.ready,所以我想我将对其进行标记,并将其归因于插件兼容性问题/bug。

再次感谢大家

EN

回答 3

Stack Overflow用户

发布于 2012-04-16 19:24:39

使用下面的内容如何?

代码语言:javascript
运行
复制
$(this).live ("change", function() {
    //...
});
票数 0
EN

Stack Overflow用户

发布于 2012-04-16 19:55:10

我已经测试了你的HTML样本和jQuery代码。有趣的是,您使用了两个无线电输入,这两个输入同时发生变化,或者它们中的任何一个都与另一个的变化发生了切换。如果您将一个值更改为1,那么它将自动将另一个值更改为0。

此外,您还使用了if ($(this).val() == "1"),因此,如果一个值更改为1,而其他值也更改为0。因此,这两个变化实际上首先显示,然后隐藏,这使得似乎没有事件触发。

票数 0
EN

Stack Overflow用户

发布于 2012-04-16 19:57:18

注释掉或删除console.log()行。除非在运行脚本时打开开发工具,否则IE会阻塞它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10180198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档