1

我已经在 PHP 中为表单动态创建了一组复选框,但我不希望出现提交按钮,除非至少选中一个复选框。在互联网上搜索大多数希望提交按钮仅在选中一个复选框后才出现的人只有一个“我同意”复选框。是动态创建阻止我的脚本工作吗?

PHP↴</p>

// Dynamically create checkboxes from database
function print_checkbox($db){
    $i = 0;
    foreach($db->query('SELECT * FROM hue_flag') as $row) {
        if ($i == 0 || $i == 3 || $i== 6 || $i == 9){
            echo '<br><br>';
        }
        $i++;
        echo '<span class="'.$row['1'].'"><label for="'.$row['1'].'">'.ucfirst($row['1']).'</label><input type="checkbox" name="hue[]" id="hue" value="'.$row['0'].'"></span> ';
    }
}

jQuery↴</p>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $('#hue[]').click(function(){
        $('#input_gown').toggle();
    });
});
</script>

PHP函数调用↴</p>

<?php print_checkbox($conn_normas_boudoir);?>

诚然,我对 jQuery 或 JavaScript 一无所知,并且仍在学习 PHP。所以,如果有更好的方法来实现这一点,请告诉我。

4

2 回答 2

2

您为所有复选框提供了相同的 ID。这是不允许的;ID 必须是唯一的。

这两个问题的简单解决方案是为所有复选框分配一个公共类:

    echo '<span class="'.$row['1'].'"><label for="'.$row['1'].'">'.ucfirst($row['1']).'</label><input type="checkbox" name="hue[]" class="hue" value="'.$row['0'].'"></span> ';

然后在jQuery中选择类:

$('.hue').change(function(){
    $('#input_gown').toggle();
});

但这可能会产生意想不到的结果;如果选中两个复选框怎么办?该#input_gown元素将再次打开和关闭。如果至少选中一个复选框,您可能只想显示它:

$('.hue').change(function(){
    var val = false;
    $('.hue').each(function() {
        val = val || $(this).is(':checked'); // any checked box will change val to true
    });
    $('#input_gown').toggle(val); // true=show, false=hide
});

http://jsfiddle.net/mblase75/AyY3Z/

于 2013-04-26T17:00:48.993 回答
0

您的 jQuery 选择器正在寻找具有 id 的元素hue[]。但是您的元素的 id 为 just hue

改变这个:↴</p>

$(document).ready(function(){
    $('#hue[]').click(function(){
        $('#input_gown').toggle();
    });
});

为此(ID 应该始终是唯一的,方括号需要转义才能与选择器引擎一起使用),(演示)):↴</p>

$(document).ready(function(){
    $('input[name=hue\\[\\]]').click(function(){
        $('#input_gown').toggle();
    });
});
于 2013-04-26T16:57:49.713 回答