$("input:checked").length 在浏览器历史中返回后在 Opera 中不起作用

Posted

技术标签:

【中文标题】$("input:checked").length 在浏览器历史中返回后在 Opera 中不起作用【英文标题】:$("input:checked").length not working in opera after go back in browser history 【发布时间】:2011-07-28 12:59:58 【问题描述】:

我的 javascript 女巫包含以下代码:

$("input:checked").length 

在浏览器中单击返回按钮后,此代码 $("input:checked").length;不在歌剧中工作。有什么我可以做的吗?

基本上我需要检查是否有两个单选按钮被选中

        <script>
    $(document).ready(function () 

        $("#signup").button();

        $("#signup").click(function () 

            alert($("#bb input:checked").length);
            if ($("#bb input:checked").length == 2) 
                $("#signup").val("1");                
            
        );
    );
</script>

@using (html.BeginForm())


<div id="wrapper">

    <div id="bb"> 
       <div id="rbl1" class="rbl1">
           <input type="radio" id="rb11" name="radio-b1" value="1"/><label for="rb11" class="radio">Everyday</label>
           <input type="radio" id="rb12" name="radio-b1" value="2"/><label for="rb12" class="radio">Saturday</label>
        </div>        

        <div id="rbl2" class="rbl2">
           <input type="radio" id="rb21" name="radio-b2" value="1"/><label for="rb21" class="radio">One</label>
           <input type="radio" id="rb22" name="radio-b2" value="2"/><label for="rb22" class="radio">Two</label>
        </div>
    </div>

</div>

<button name="submit" id="signup">Sugn up</button>

第一次在所有浏览器中运行良好,在检查单选按钮后,我在那个时候提交了我的表单,一切都很好。但是然后我只是检查了如果我返回浏览器历史记录并再次提交表单会发生什么,所以除了歌剧之外的所有浏览器都很好,它在这个代码行 $("#bb input:checked").length == 2) 和没有详细说明原因。

在我使用 jQuery 1.5.1 之前,现在我更新到 1.5.2 仍然是同样的问题。 详细示例代码更新,完整的html代码贴在这里http://sourcepod.com/puvmmz30-4571

可能是 Opera 历史出了问题。

还有其他方法我可以设置 $("#signup").val("1"); 的值吗?或者检查是否选择了广播列表(“#bb input:checked”)并且 Opera 历史记录没有清除它。

【问题讨论】:

你有什么版本的jquery?你试过最新的吗? 失败是什么意思?发生什么了?您是否尝试过警报以查看实际值是多少? 我用'debugger'语句看看opera dragonfly发生了什么,'("#bb input:checked").length ==的值为0,但应该不是0跨度> @Reg 这可能是 Opera 正在向您显示历史记录中的页面,而不是实际重新加载/刷新页面。您有我们可以查看的测试页吗? 完整的html源代码贴在这里sourcepod.com/puvmmz30-4571 【参考方案1】:

您是否尝试过使用size() 而不是length

【讨论】:

api.jquery.com/checked-selector 他们做同样的事情 ,var n = $("input:checked").length;, 是的,但是length 是 JavaScript 的固有部分。 size() 独立于浏览器... 不,它返回相同的 0 而不是正确的值,因为基本上 size() 获取 .length 的值【参考方案2】:

我可以使用 Opera 12.12 和 jQuery 1.6.1 重现这个问题。 如果我将 jQuery 升级到 1.9.1,我将无法重现此问题。

如果您无法升级您的 jQuery 版本,您可以使用 .each() 和 value.checked 获得正确的检查值。

见: $(".reasons input").each(function(index, value) console.log(value.checked, value))

它返回正确的检查值。

【讨论】:

以上是关于$("input:checked").length 在浏览器历史中返回后在 Opera 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

input---checked小问题

jQuery怎样判断按钮是不是被选中

java.security.AccessControlException:access denied("java.io.FilePermission" "文件路径&quo

关于jQuery,$(":button") 中的冒号是什么意思?

关于jQuery,$(":button") 中的冒号是啥意思?

当我在 ApolloGraphQL 中使用 TypeGraphQL 订阅时出错:UnsupportedProtocolError: Unsupported protocol "ws:&quo