0

我有一些我生成的复选框值

$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 中的复选框中获取值的方式上,可能是:

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

因为变量 courseToAdd 似乎只包含页面上第一个复选框的值,无论我在点击提交之前在页面上检查了多少个复选框。

4

3 回答 3

1

正如我在上面的评论中提到的:

甚至不看您发布的 AJAX 代码,您就可以从复选框中获取值的方式存在问题。您coursesToAdd[]对所有复选框使用相同的 id。这是无效的,因为页面上的所有 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
    }
}
于 2012-12-07T17:20:16.177 回答
0

您正在异步执行此操作。所以你应该利用 onreadystatechange 事件。

尝试:

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

并删除 location.reload()

于 2012-12-07T11:23:41.230 回答
0

当有多个值通过 POST 时,它需要encodeURIComponent(variablename)

于 2012-12-07T11:30:14.777 回答