检查是否在jQuery中选中了任何复选框?

时间:2009-12-29 10:16:17

标签: jquery

我有一个form.html:

    <div id="tag_option">
        <li><label for="id_customer_type">Customer type:</label>
            <select id="id_customer_type" class="required" name="customer_type">
                <option value="" selected="selected">All</option>
                <option value="NGO">NGO</option>
                <option value="GOV">GOV</option>

            </select>
        </li>

        <li>
            <label for="id_tag">Tag:</label> <dl>
            <dt><strong>School</strong></dt>
            <dd><label for="id_tag_1"><input
              name="tag"
              value="2"
              id="id_tag_1"
              type="checkbox"> Private</label></dd>
            <dd><label for="id_tag_2"><input
                   name="tag" value="3" id="id_tag_2" type="checkbox"
                   > Public</label></dd>
        </dl></li>

        <input id="tag_checked" name="tag_checked" value="" type="hidden">
        <input id="store_filter_saved" name="store_filter_saved" value="" type="hidden">
    </div>

怎么做?

我试过..

$(document).ready(function(){
    function updateTagChecked() {
        var list_tag_selected = [];
        //$("input[name^=tag_]")
        $('#tag_option :checked').each(function() {
            list_tag_selected.push($(this).val());
        });
        $('#tag_checked').val(list_tag_selected.join("&"))
    }

    $(function() {
         $('#tag_option input').click(updateTagChecked);
         updateTagChecked();
    });

我的问题在这一点上我只想指定复选框。

$('#tag_option :checked').each(function()

我尝试改为:

$("input[name^=tag]")
$('div#tag_option input[name="tag"]').attr('checked')

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您是否尝试选中名为“tag”的复选框?这样做:

$('input[name=tag]:checked') 

$("input[name^=tag]")显然会返回所有复选框,无论是否选中它们,$('div#tag_option input[name="tag"]').attr('checked')都会从第一个输入中返回名称为“name”的checked属性值。< / p>

修改

  

您能解释$('input[name=tag]:checked')$('#tag_option :checked')

之间的差异输出吗?

第一个获取具有“tag”作为input属性值的所有name元素,这些元素也会被检查。 “已检查”元素表示处于检查状态(即活动)的单选按钮或复选框。那个选择器会匹配这些:

<input type="checkbox" name="tag" checked="checked" />
<input type="radio" name="tag" checked="checked" />

其中任何一个:

<input type="checkbox" name="something_else" checked="checked" />
<input type="checkbox" name="tag" />
<input type="radio" name="not_tag" checked="checked" />

第二个获取id为tag_option的元素内的所有已检查元素。该选择器将匹配input中的所有div元素:

<div id="tag_option">
    <input type="checkbox" checked="checked" name="foo" />
    <input type="checkbox" checked="checked" name="bar" />
    <input type="radio" checked="checked" name="zyxxy" />
</div>

答案 1 :(得分:1)

之间的区别:

$( '输入[名称=标签]:检查') 同时对所有元素做一些事情。如果你对所有元素进行相同的精确操作,例如为它们提供所有类,那么它非常有用且快速,例如

$('#tag_option:checked')。each(function() 提供更多的自由,因为它迭代了每个元素,然后你可以逐个给它们特定/不同的命令