CheckBox 被选中但不执行功能

Posted

技术标签:

【中文标题】CheckBox 被选中但不执行功能【英文标题】:CheckBox being checked but not doing function 【发布时间】:2018-02-03 15:26:09 【问题描述】:

我目前正在使用 php 循环从数据库中生成面板。 在每个面板上都有一个复选框。选中后,它会检查可折叠面板中其下方的所有复选框。

当面板中的复选框被面板标题中的复选框选中时,它意味着运行一个函数来更新我的数据库,表明该框已被选中。当您关闭可折叠面板并手动选中该框时,该功能将起作用。但是当你从更高级别选中该框并选中它下面的所有框时,它并没有运行我放入的onchange函数。

谁能帮忙?

谢谢, 克里斯蒂安

PHP:

foreach ($results3 as $table3) 
        $output_string .= "<div class=\"panel-inner\">\n";
        $output_string .= "<div class=\"row\">\n";
        $output_string .= "<div class=\"col-sm12\">\n";
        $output_string .= "<div class=\"panel-body\">\n";
        $output_string .= "<h4 class=\"panel-title\">\n";
        $output_string .= "<a>$table3[Call_Flow]</a>\n";
        $output_string .= "<input class=\"mycheckbox\" type=\"checkbox\" value=\"$table3[Test_ID]\" onchange=\"adds(tccb$j)\" id=\"tccb$j\"/>\n";
        $output_string .= "</h4>\n";
            $output_string .= "</div>\n";
        $output_string .= "<div id=\"collapseflow$j\" class=\"panel-body collapse\">\n";

html

<div id="check">

    </div>

    <script>
    function adds(id) 

    var value = $(id).val()

        jQuery.ajax(
            url: "selection_update.php",
            data: "value": value,
            type: "POST",
            dataType: 'json',
                success:function(responce)
                $("#check").html(responce);
            
        );
    
    </script>

编辑:

这是我用来检查所有子复选框的代码。

$output_string .= "<script type=\"text/javascript\" language=\"javascript\">\n";
$output_string .= "function checkCheckboxes( id, pID )\n";
$output_string .= "$('#'+pID).find(':checkbox').each(function()\n";
$output_string .= "jQuery(this).prop('checked', $('#' + id).is(':checked'));\n";
$output_string .= ");\n";     
$output_string .= "\n";
$output_string .= "</script>\n";

【问题讨论】:

PHP 代码没用。显示它输出的 HTML,因为这是我们需要看到的。 你在哪里执行adds(...)? 您是否错过了复选框@edgaromar90 中的onchange 处理程序? 完全错过了!我的坏 【参考方案1】:

这是因为onchange 仅对用户点击做出反应,而不是简单的值更改。要解决这个问题,您需要手动触发onchange 函数。

所以在你的 oarent 的 onchange 函数中,确保你选择了相关的孩子并在他们身上调用.onchange()

这是一个示例,其中一个复选框更改另一个复选框,而没有 .onchange() 调用:

https://jsfiddle.net/c1zwek1u/

这里是:

https://jsfiddle.net/c1zwek1u/1/

请注意,当孩子的价值发生变化时,它会提醒您。

对于多个孩子,您只需遍历组并单独调用每个孩子,如下所示:

https://jsfiddle.net/c1zwek1u/3/

在 Jquery 中,您可以像这样触发更改 $(selector).trigger('change');

【讨论】:

好吧,很酷,这是正确的 :) 当您有多个孩子时会发生什么?我目前正在根据它们所在的 div 分组检查我的复选框 我已经编辑了我的帖子,以显示我当前如何检查和取消选中我的父母复选框。 我编辑了我的答案以展示如何使用循环处理多个孩子。 由于您使用的是 JQuery(尽管您不需要),所以我添加了一行关于如何使用 JQuery 触发更改。【参考方案2】:

您需要将添加(参数)作为字符串发送。并且因为您使用它来获取 DOM 元素,所以您需要将主题标签添加到

更改此行:

$output_string .= "<input class=\"mycheckbox\" type=\"checkbox\" value=\"$table3[Test_ID]\" onchange=\"adds(tccb$j)\" id=\"tccb$j\"/>\n";

进入这一行:

$output_string .= "<input class=\"mycheckbox\" type=\"checkbox\" value=\"$table3[Test_ID]\" onchange=\"adds('#tccb$j')\" id=\"tccb$j\"/>\n";

【讨论】:

以上是关于CheckBox 被选中但不执行功能的主要内容,如果未能解决你的问题,请参考以下文章

el-checkbox根据是否被选中执行不同的操作

layer.js怎样判断checkbox是不是被选中

使用js全部选中checkbox,并且进行判断

复选框属性选中为真,但不显示勾号

如何监听checkbox是不是被选中

判断checkbox是不是被选中