Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 过帐选中和未选中复选框_Php_Jquery_Checkbox_Webforms - Fatal编程技术网

Php 过帐选中和未选中复选框

Php 过帐选中和未选中复选框,php,jquery,checkbox,webforms,Php,Jquery,Checkbox,Webforms,我正在尝试在web表单中创建一系列复选框,根据是否选中它们,将“true”或“false”发布到下一个php页面。我决定,对于每个复选框(value=“true”),我将有一个隐藏的复选框(value=“false”),它总是相反的(当复选框被选中时,隐藏的复选框被取消选中等等),我使用jQuery来实现这一点 “td”元素的数量未知(“td”可以使用按钮无限次克隆,以提交多个值)。出于测试目的,我将警报添加到jQuery中 当我将jQuery代码和隐藏复选框添加到源代码中时(为了测试目的,我将

我正在尝试在web表单中创建一系列复选框,根据是否选中它们,将“true”或“false”发布到下一个php页面。我决定,对于每个复选框(value=“true”),我将有一个隐藏的复选框(value=“false”),它总是相反的(当复选框被选中时,隐藏的复选框被取消选中等等),我使用jQuery来实现这一点

“td”元素的数量未知(“td”可以使用按钮无限次克隆,以提交多个值)。出于测试目的,我将警报添加到jQuery中

当我将jQuery代码和隐藏复选框添加到源代码中时(为了测试目的,我将其设置为可见),代码无法工作,我网页上的所有其他jQuery都停止工作

jQuery代码:

$(document).ready(function(){
    /***post all 'required' checkboxes instead of just checked ones***/
    $(".required").click(function(event){
        event.preventDefault();
        alert("test");
        nextIndex = this.index() + 1;
        alert(nextIndex);
        $(".required:eq(nextIndex)").attr("checked", !.required:eq(nextIndex).attr("checked"));
    });
});
HTML:


这一行可能会导致某些东西损坏:

$(".required:eq(nextIndex)").attr("checked", !.required:eq(nextIndex).attr("checked"));
你可能是说:

$(".required:eq(" + nextIndex + ")").attr("checked", !$('.required:eq(' + nextIndex + ')').attr("checked"));
还要注意,您需要从引号中去掉
nextIndex

我猜您的javascript控制台可能会抛出与此相关的某种错误

编辑:

我注意到的另一个错误是:

nextIndex = this.index() + 1;
.index()
是一个必须在jquery对象上调用的jquery函数
这是单击的元素,因此您需要说:

nextIndex = $(this).index() + 1;

顺便说一句,你可能想看看它能帮你摆脱这一切
nextIndex
mumbo-jumbo

您不必隐藏其中一个复选框。以下是一个解决方案,可以实现您的目标:

<input type="hidden" name="required" value="false" />
<input type="checkbox" name="required" value="true" />

这样,您就不需要任何客户端javascript来切换隐藏的复选框。

如果您这样命名复选框,则不必使用索引:

<input type="checkbox" name="checkbox_name[]" />
这将遍历所有未选中的复选框,检查它们,并将其值设置为
false
。以下是您在PHP中获得的内容:

[checkbox_name] => Array
    (
        [0] => off
        [1] => on
        [2] => off
    )
而不是:

[checkbox_name] => Array
    (
        [0] => on
    )

是的,解决方案是在每个复选框之前输出一个
隐藏的
元素,并带有复选框的“off”值。选中复选框会导致“打开”值而不是隐藏输入的值被发布。这是一个很好的解决方案,但是我不知道会有多少复选框。。。我将查看是否可以找到一种方法,在使用我的网页上的按钮添加它们时自动命名它们。只要在复选框元素之前添加一个与DOM中的复选框同名的隐藏输入,只要每个复选框都有一个同名的隐藏输入,该方法就可以工作。如果隐藏输入意外地作为复选框后的节点添加到DOM中,则会产生相反的效果,并且该值将始终为false(隐藏输入的值)。今天偶然发现了这一点,必须让您知道这是一个出色的解决方案。它是如此干净,易于实施!!喜欢学习这样的行业技巧。这是我见过的最好的解决方案,所以这听起来像是一份更适合单选按钮而不是复选框的工作。我页面上的另一个jQuery现在正在工作,所以我也很关心我遇到的语法错误-谢谢!然而,它仍然没有按照我希望的方式工作。当我单击复选框时,我会看到第一条警报消息,但不会看到第二条,然后复选框会再次取消选中。隐藏复选框不会发生任何变化(它保持选中状态)。
$('form').submit(function(){

    $(":checkbox:not(:checked)").each(function(element, index){
        $(this).attr({value: 'false', checked:'checked'});
    });

    return true;
});
[checkbox_name] => Array
    (
        [0] => off
        [1] => on
        [2] => off
    )
[checkbox_name] => Array
    (
        [0] => on
    )