2

我确定我会为此失去一些代表点,因为这是一个如此基本的问题,但我无法弄清楚我在使用“#”通过 id 选择的 jQuery 选择器上做错了什么。

鉴于我的文档中的这个元素:

<%= Html.CheckBox("IsAlwaysValid", true,
                    new { onchange = "showHideValidSetList()", id = "IsAlwaysValidCheckBox" })%>

(输出以下标记:

<input checked="checked" id="IsAlwaysValidCheckBox" name="IsAlwaysValid" onchange="showHideValidSetList()" type="checkbox" value="true" /><input name="IsAlwaysValid" type="hidden" value="false" />

)

然后这个函数使用 jQuery 选择器:

<script type="text/javascript">
    function showHideValidSetList() {
        if ($("#IsAlwaysValidCheckBox").checked) {
            alert("IsAlwaysValidCheckBox is checked");
            return;
        }
        else {
            alert("IsAlwaysValidCheckBox is NOT checked");
            return;
        }
    }
</script>

应该完全等同于使用 javascript DOM 的这个:

<script type="text/javascript">
    function showHideValidSetList() {
        if (document.getElementById("IsAlwaysValidCheckBox").checked) {
            alert("IsAlwaysValidCheckBox is checked");
            return;
        }
        else {
            alert("IsAlwaysValidCheckBox is NOT checked");
            return;
        }
    }
</script>

对?但是 javascript 版本按预期工作,而 jQuery 版本总是采用“else”分支,表明它并没有真正查看复选框的状态。

我究竟做错了什么?

谢谢你陪我。

4

6 回答 6

4

用这个:

if ($(checkBoxControl).attr("checked")) {

而不是这个:

if ($("#IsAlwaysValidCheckBox").checked) {

虽然看起来 jQuery 选择器返回 DOM 元素(如复选框),但它们实际上返回的是一个 jQuery 对象,它没有名为checked. 您可以在未压缩的 jquery 源代码(来自当前版本,版本 1.3.2 )中最清楚地看到这一点:

jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
        // ...
        // Handle $(DOMElement)
        if ( selector.nodeType ) {
             this[0] = selector;
             this.length = 1;
             this.context = selector;
             return this;
        }
        // ...
    }
}

许多有趣的 jQuery 方法(如 animate、attr、html 等)都在 上运行this.context,每当您应用选择器时都会指定或重新定义它。

于 2009-10-19T14:50:37.463 回答
3
$("#IsAlwaysValidCheckBox").checked

不正确,因为$("#IsAlwaysValidCheckBox")返回的是 jQuery 对象,而不是元素。jQuery 对象没有调用属性checked,这就是它进入else.

你要:

$("#IsAlwaysValidCheckBox").val()

或者:

$("#IsAlwaysValidCheckBox:checked").length > 0

或者:

$("#IsAlwaysValidCheckBox").attr("checked") === "checked"

或者:

$("#IsAlwaysValidCheckBox")[0].checked

或者:

$("#IsAlwaysValidCheckBox").get(0).checked
于 2009-10-19T14:51:23.157 回答
1

你试过用

if ($("#IsAlwaysValidCheckBox").attr("checked")) {
于 2009-10-19T14:51:39.930 回答
1

你需要使用这个:

$("#IsAlwaysValidCheckBox").attr("checked") 

确定复选框是否被选中。

于 2009-10-19T14:52:07.293 回答
1

做一件简单事情的另一种方法:

$('#IsAlwaysValidCheckBox:checked').length

selector:checked 是 jquery 特有的,用于返回一个选中的元素。长度检查是否有任何元素返回。

许多方法可以做同样的事情。

于 2009-10-19T14:54:06.930 回答
0

试试这个:

<script type="text/javascript">
    function showHideValidSetList() {
        if ($("#IsAlwaysValidCheckBox").val()) {
            alert("IsAlwaysValidCheckBox is checked");
            return;
        }
        else {
            alert("IsAlwaysValidCheckBox is NOT checked");
            return;
        }
    }
</script>

val方法是一种检查值的“跨元素”方式......无论是文本框、选择列表还是复选框......您都可以使用 .val() 来获取/设置它的值:- )

于 2009-10-19T14:51:17.340 回答