2012-12-07 58 views
0

我有產生作爲傳遞選中的複選框的數組的JavaScript

$sql = "sql statement"; 
$courseResult = mysqli_query($connection, $sql); 
$courses = mysqli_fetch_row($ 
// Display the courses the user has taken 
while ($courses) { 
    echo "<td><input type='checkbox' name='coursesToAdd[]' id='coursesToAdd[]' value='$courses[0]'>$courses[0]</td></tr>";    
    $courses = mysqli_fetch_row($courseResult); 
} 

<input type='button' onclick='EditStudentCertificates()' value='Submit'/> 

我想要做的是獲取值一些複選框值用戶檢查到一個數組,而不是訪問該陣列由JavaScript的,我試圖做的是這樣的,但它似乎並沒有工作:

 function EditStudentCertificates(){     
      if (window.XMLHttpRequest){ 
       // code for IE7+, Firefox, Chrome, Opera, Safari     
       xmlhttp=new XMLHttpRequest(); 
      } 
      else{ 
       // code for IE6, IE5 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      }  

      var coursesToAddField = document.getElementById("coursesToAdd[]"); 
      var coursesToAdd = coursesToAddField ? coursesToAddField.value : ''; 

      xmlhttp.open("POST","updateStudentCInfo.php",true); 
      xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
      xmlhttp.send("certValue="+certValue+"&coursesToAdd="+coursesToAdd); 
      window.alert("Your certificate information has been updated"); 
      window.location.reload();     
     } 

什麼,我認爲這個問題是是一些與我試圖讓在JavaScript從checkboxs的值的方式,有可能東西與:

  var coursesToAddField = document.getElementById("coursesToAdd[]"); 
      var coursesToAdd = coursesToAddField ? coursesToAddField.value : ''; 

因爲變量coursesToAdd似乎除了第一個複選框在頁面上的值以外,無論在點擊提交之前我在頁面上檢查了多少個複選框。

+2

Ajax調用完成之前你重新加載頁面(胡亂猜測因爲你沒有真正告訴我們問題是什麼,也沒有提出問題)。 – adeneo

+1

它看起來像你所有的複選框使用相同的ID。你不能那樣做。 Ids需要是獨一無二的。您可以對所有名稱使用相同的「coursesToAdd []」,但不能使用ID。改爲使用類,然後遍歷getElementsByClassName而不是getElementById。 – Steve

回答

1

正如我上面我的評論中提到的location.reload()

+0

這正是我所期待的!謝謝! – user1875195

0

你正在做它的異步。所以你應該使用onreadystatechange事件。

嘗試:

xmlhttp.onreadystatechange = function(){ 
    window.location.reload();  
} 

和刪除當有一個以上的值通過POST它需要encodeURIComponent(variablename)

+0

問題似乎是從用戶檢查的複選框中獲取值。我不知道什麼是訪問這些信息的最佳方式是從javascript – user1875195

+0

DId您檢查瀏覽器中的HTML?渲染是否正確? –

0

甚至沒有看到您發佈的AJAX代碼,您在從複選框中獲取值的方式上遇到問題。所有複選框都使用相同的編號coursesToAdd[]。這是無效的,因爲所有ID都需要在頁面上唯一。您需要改爲使用類名。

在HTML/PHP:

while ($courses) { 
    echo "<td><input type='checkbox' name='coursesToAdd[]' class='coursesToAdd' value='$courses[0]'>$courses[0]</td></tr>";    
} 

而在你的JS,你可以得到的複選框這樣的:

var courseCheckboxes = document.getElementsByClassName("coursesToAdd"); 
for (var i=0; i < courseCheckboxes.length; i++) { 
    if (courseCheckboxes[i].checked) { 
     // do something with the checkbox 
    } 
}