2013-04-26 50 views
1

我已经动态地创建了PHP中的复选框数组的窗体,但我不想提交按钮出现,除非至少有一个复选框被选中。在互联网上搜索大多数希望提交按钮仅在检查复选框后才出现的用户只有一个“我同意”复选框。它是阻止我的脚本工作的动态创建吗?PHP动态创建与JQuery复选框.toggle()

PHP↴

// 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↴

<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函数call↴

<?php print_checkbox($conn_normas_boudoir);?> 

诚然,我什么都不知道的jQuery或JavaScript和我仍然在学习PHP。所以,如果有更好的方法来实现这一点,让我知道。

+0

+1使用的↴:)另外我的第一个猜测是方括号与jQuery选择引擎发生冲突,但我必须深入挖掘一下,以确保 – 2013-04-26 16:53:26

+0

不要紧,你使用的ID选择器,但传递输入名称..我会键入一个答案,但我想这是由更快的打字机指出比当你读到这个 – 2013-04-26 16:55:41

+0

你给你所有的复选框相同的ID。这是不允许的; ID必须是唯一的。 – Blazemonger 2013-04-26 16:59:20

回答

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/

+0

我明白了。我以为id应该和名字一样。我想我应该先阅读[this](http://stackoverflow.com/questions/7470268/html-input-name-vs-id)。我会尝试你的建议。 – 2013-04-26 17:10:03

+0

对不起,您是否重写了.click to .change,因为更改是相同效果的更基本级别? – 2013-04-26 17:14:52

+0

我遵循你的代码逐字,但按钮只是保持隐藏。我如何去错误检查jQuery? – 2013-04-26 17:23:37

0

您的jQuery选择器正在寻找编号为hue[]的元素。但是你的元素只有hue

更改此:↴

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

这个(ID应该真的永远是独一无二的,而方括号需要进行转义与选择的发动机工作),(a demo)):↴

$(document).ready(function(){ 
    $('input[name=hue\\[\\]]').click(function(){ 
     $('#input_gown').toggle(); 
    }); 
}); 
+0

感谢您的解决方案。不过,我想我应该删除id标签。 – 2013-04-26 17:11:53

+0

如果您计划直接访问或设计样式(有一个避免ID样式选择器的有效参数)元素,则只需要一个ID属性。 Blazemonger的方法也可以工作,但绑定到输入名称,我认为最符合语义正确与最小的HTML,但这只是我 – 2013-04-26 17:26:28

+0

哦,真的吗?我认为绑定它的名字看起来像一个工作。将来,当我阅读jQuery时,我会牢记它。再次感谢。 – 2013-04-26 17:37:37