2013-04-26 56 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