-1

由于某种原因,我的代码不起作用?!我需要检查复选框,如果所有复选框都“未选中”,然后启用隐藏字段并将值发送到 db,这样我就可以确定复选框未选中。

问题 1:为什么我的 jquery 代码不起作用?

问题 2:我需要将选中或未选中的值记录到 DB。我的计划是检查是否没有在 php.ini 中选择。这是一个好习惯吗?

HTML

<tr class="more_info">
        <th valign="top">Other options:</th>
        {foreach from=$HTML_cOPTIONS key=dbname item=optname}
            {if ! empty($CARINFO[car].{$dbname})}
                <td><input type="checkbox" id="forced_checkbox" name="c_options[]" value="{$dbname}" checked/> {$optname} </br></td>
            {else}
                <td><input type="checkbox" id="forced_checkbox" name="c_options[]" value="{$dbname}"/> {$optname} </br></td>
            {/if}
        {/foreach}
        <input type="hidden" id="forceSendCheckBox" name="c_options[]" value="nocheckboxes"/>
        <input type="button" value="Check" id="check" />
    </tr>

jQuery

$('#check').bind('click',function()
{
    if ($('#forced_checkbox').filter(':not(:checked)').length == 0) {
        console.log('at least one checked');
        $("#forceSendCheckBox").prop('disabled',true);//do not send this field to DB
    } else {
        console.log('nothing checked');
        $("#forceSendCheckBox").prop('disabled',false);//send empty checkboxes
    }
});

更新

这是一个小提琴,它似乎仍然坏了。:-/

http://jsfiddle.net/L5J96/

4

2 回答 2

9

ID 必须是唯一的。改用一个类。

在您的小提琴中,您遇到了几个问题。首先,您忘记从菜单中选择 jQuery 框架,因此没有任何 jQuery 代码起作用。其次,您将过滤器从 更改not(:checked)(:checked),但没有更改== 0> 0。第三,没有not, 你不应该在过滤器选择器周围有括号。第四,您尝试使用 在输入字段中显示消息.text(),但正确的方法是.val()

这是更正后的代码:

$('#check').on('click', function () {
    if ($('.forced_checkbox').filter(':checked').length > 0) {
        $('#forceSendCheckBox').val('at least one checked');
    } else {
        $('#forceSendCheckBox').val('nothing checked');
    }
});

小提琴

于 2013-08-26T19:45:52.557 回答
1

正如 Barmar 所提到的,ID 必须是唯一的。

接下来,使用.on()代替.bind()- 类似的语法,这样很容易做到。(.bind 已弃用)

但是,要回答您的问题,您可以通过选择所有未选中的复选框并遍历它们来快速发现哪些复选框未选中。

如果您需要创建一个未选中复选框的列表,那么您需要每个复选框都具有独特性(如果房间里的每个人都被命名为“Bob”,那么制作一个有用的棕色头发男性列表将很困难) . 为此使用 ID attr,如底部的 jsFiddle 示例所示。

$("input:checkbox:not(:checked)").each(function() {
    alert($(this).attr('id')); 
});

jsFiddle在这里

这是一个扩展的 jsFiddle 示例,该示例演示了如何根据您的帖子中的要求将未选中的复选框列表保存到隐藏字段中。


关于您的 jsFiddle,需要调整以下内容:

请参阅修改后的 jsFiddle

  1. .on()语法的使用。使用.on(document)or.on(body)代替:

    $('document').on('action', '#elementID', function() { //Do stuff here });

  2. 为了通过未检查对象的集合进行交互,您应该使用 jQuery 的.each()方法。

    $('.forced_checkbox').filter(':not(:checked)').each(function() { //Do stuff });

希望这可以帮助。

于 2013-08-26T19:59:08.480 回答