希望这不是重复,所以请耐心等待。
我有一个表单是一系列复选框,在数据库中设置一个从0到1的布尔值,然后在提交时,它接受这些值,更新数据库,然后刷新页面,这样如果值是如果设置为0,则取消选中该复选框,或者如果值为1,则选中该复选框。所有这些都在工作 - 我的代码中没有任何问题。
我的问题是,在我的SUBMIT按钮上方,我有一个Select / Deselect All按钮,如果在页面刷新时选择了ALL,则复选框保持选中状态。但是在刷新时,按钮是未选中的,我必须单击它两次才能让复选框取消选中前面提到的所有复选框。
这是我的代码:
<form action="" method="post">
<?php
while( $row = mysql_fetch_array($result) ){
$id = $row['id'];
$active = $row['active'];
$name = $row['name'];
$class = $row['class'];
if($active == '1'){
**IF ANY OF THESE CHECKBOXES ARE ACTIVE, THEN THE SELECT/DESELECT ALL BUTTON SHOULD BE CHECKED -- WHAT IS THE PROPER SYNTAX???**
}
echo "<input type='hidden' name='activate_".$id."' value='0'>";
echo "<label class='switch'><input type='checkbox' class='checkbox' name='activate_".$id."' value='1'";
if($active == '1'){
echo "checked='checked'";
}
echo "/><div class='slider'></div><span>" . $name . "</span></label>";
}
mysql_close();
?>
<label for="select_all" class="selectAllLabel"><input type="checkbox" id="select_all"/> Activate/Deactivate All</label>
<input type="submit" class="submit" name="submit" value="Update Active Roster">
</form>
<iframe src="index.html" width="376" height="260" style="border: 0;"></iframe>
<?php
if(isset($_POST['submit'])){
require "config.php";
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
for ($i = 1; $i<count($_POST); $i++){
$sql = "UPDATE roster SET active = ".$_POST["activate_$i"]." WHERE id = ".$i;
if ($conn->query($sql) === TRUE) {
echo "";
} else {
echo $conn->error;
}
}
$conn->close();
echo "<meta http-equiv='refresh' content='0'>";
}
?>
<script>
$(document).ready(function(){
//select all checkboxes
$("#select_all").change(function(){ //"select all" change
var status = this.checked; // "select all" checked status
$('.checkbox').each(function(){ //iterate all listed checkbox items
this.checked = status; //change ".checkbox" checked status
});
});
$('.checkbox').change(function(){ //".checkbox" change
//uncheck "select all", if one of the listed checkbox item is unchecked
if(this.checked == false){ //if this item is unchecked
$("#select_all")[0].checked = false; //change "select all" checked status to false
}
//check "select all" if all checkbox items are checked
if ($('.checkbox:checked').length == $('.checkbox').length ){
$("#select_all")[0].checked = true; //change "select all" checked status to true
}
});
});
</script>
您可以从我的代码中看到我希望逻辑触发Select / Deselect All值的地方。我只是不知道这样做的正确语法。
提前谢谢。
答案 0 :(得分:4)
&#34;谢谢你@ Fred-ii-你能发一个答案,所以我可以给你信任。 - Murphy1976&#34;
根据OP的要求。
php =&gt; http://php.net/manual/en/language.operators.comparison.php&#34; Ternary ......&#34; ;-)
即。来自那里的例子:
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
您可以将其替换为isset()
,该var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().forBrowser('firefox').build();
driver.get('https://www.youtube.com/?hl=lt&gl=LT');
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element = driver.findElement(By.className("load-more-text']"));
js.executeScript("arguments[0].scrollIntoView();", element);
应用于复选框/无线电。
根据我从数据库中获取并检查/取消选中某些内容时的个人经验,使用三元运算符我发现这是最好的方法。
这有点棘手但却有奇效。
其他参考资料:
答案 1 :(得分:1)
到目前为止,这不是最佳做法,但它正在发挥作用。我已将Fred -ii-回答标记为正确,所以请回答我的答案。如果你想要快速和肮脏的版本,这就是我想出来的。
在我最初的PHP块中,我声明了一个变量$ checked并将其设置为“”为空。 在我的WHILE循环中,我检查所有进入的行,如果它们中的任何一个是活动的,那么我将$ checked设置为“checked” 在我的实际复选框中,我有一块PHP,它只是回显那个变量。 这是我的最终代码:
<?php
$checked = "";
while( $row = mysql_fetch_array($result) ){
$id = $row['id'];
$active = $row['active'];
$name = $row['name'];
$class = $row['class'];
if($active == '1'){
$checked = "checked";
}
echo "<input type='hidden' name='activate_".$id."' value='0'>";
echo "<label class='switch'><input type='checkbox' class='checkbox' name='activate_".$id."' value='1'";
if($active == '1'){
echo "checked='checked'";
}
echo "/><div class='slider'></div><span>" . $name . "</span></label>";
}
mysql_close();
?>
<label for="select_all" class="selectAllLabel"><input type="checkbox" id="select_all" <?php echo $checked; ?>/> Activate/Deactivate All</label>
<input type="submit" class="submit" name="submit" value="Update Active Roster">
</form>
<iframe src="index.html" width="376" height="260" style="border: 0;"></iframe>
<?php
if(isset($_POST['submit'])){
require "config.php";
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
for ($i = 1; $i<count($_POST); $i++){
$sql = "UPDATE roster SET active = ".$_POST["activate_$i"]." WHERE id = ".$i;
if ($conn->query($sql) === TRUE) {
echo "";
} else {
echo $conn->error;
}
}
$conn->close();
echo "<meta http-equiv='refresh' content='0'>";
}
?>
<script>
就像我在开始时说的那样,这是一种快速而肮脏的方式,而三元运算符是最佳实践。