2012-10-30 23 views
1

我有一個for循環,它根據從mySQL數據庫接收到的信息形成複選框列表。下面是形成複選框的for循環(刪除了不必要的代碼)。Javascript函數僅輸出PHP for循環中第一個複選框的值

for ($i = 1; $i <= count($descriptionIDsArray); $i++) { 
    $statuses = mysql_fetch_assoc(mysql_query(sprintf("SELECT status, description FROM status_descriptions WHERE description_id='$i'"))); 
    $status = $statuses["status"]; ?> 
    <input type="checkbox" value="<?php echo $status ?>" <?php if ($check == 1) {echo "checked='checked'";} ?> onchange="checkBox()" /><?php echo $description ?><br /> 
<?php } ?> 

選中或取消選中一個框調用以下功能:

<script type="text/javascript"> 
    function checkBox() { 
     var status = $("input:checkbox").val(); 
     document.getElementById("test").innerHTML = status; 
    } 
</script> 

我可以得到出現在「測試」的唯一價值是第一個複選框的值。如果我在初始for循環中回顯$ status,所有的值都顯示正確,所以當Javascript代碼正在檢索相應的值時,問題似乎就會出現。

+0

你有什麼價值_trying_得到?最近檢查的框的值? –

+0

是的,這是正確的。 – scrolls

回答

1

如果你仍想保留內聯事件處理程序,將其更改爲:

onclick="checkBox(this);" 

並將功能更改爲:

function checkBox(chk) { 
    var status = chk.value; 
    document.getElementById("test").innerHTML = status; 
} 

請注意,onclick更好地支持複選框和單選按鈕比onchange。此外,我提供此更改的原因是因爲將this傳遞給checkBox函數會引用應用click的元素。這樣,您知道在checkBox之內,參數chk將是剛更改的特定複選框。然後,只需使用.value即可獲得該值,因爲它是一個簡單的DOM節點。

無論如何,我建議使用jQuery綁定click事件。喜歡的東西:

$(document).ready(function() { 
    $("input:checkbox").on("click", function() { 
     var status = this.value; 
     document.getElementById("test").innerHTML = status; 
    }); 
}); 

但是可以很明顯的使用$(this).val()代替this.value,但何必呢?如果您使用jQuery綁定事件,只要確保在HTML中取出內聯事件處理程序即可。

你可以看一下爲什麼要使用,而不僅僅是作爲:checkbox的jQuery選擇在這裏:http://api.jquery.com/checkbox-selector/

1

當你

$('input:checkbox').val(); 

它返回表單上的類型複選框的第一個輸入,不一定被點擊的一個。

要返回實際點擊的人,你需要做的是這樣的:

$(document).ready(function() { 
    $('input:checkbox').bind('click', function() { 
     clickBox($(this)); 
    }); 
}); 

function clickBox(field) { 
    $('#test').html(field.val()); 
} 
+0

因爲您已經從'click'處理程序傳遞了一個jQuery對象,所以沒有理由用'$()'封裝'field'。應該能夠使用'field.val()' – Ian

+0

是的,你說得對,我已經更新了答案。感謝您的反饋。 –

+0

沒問題,只是想指出:) – Ian

0

如果你使用jQuery的,爲什麼用內聯事件打擾?

你可以寫,像:

$(':checkbox').change(function(){ 

     $('#test').html($(this).val()); 
     //`this` is the checkbox was changed 

    //for check if item is checked try: 

     $(this).is(':checked') // boolean 
}); 

如果傳遞的代碼放在您的複選框前請確保您調用的代碼加載文檔時;

$(function(){ 
    //code from above here 
}); 

jQuery很好地記錄了大量的樣品。 我覺得你會喜歡它docs.jquery.com

相關問題