javascript html表单验证与数组

时间:2013-05-30 22:42:36

标签: php javascript html ajax

很抱歉,如果我的标题令人困惑,我不知道如何准确描述我正在使用的数组。 我使用简单的ajax,以便用户可以选择案例中的提供者数量。然后填充正确数量的下拉框。 基本上下拉是使用这个php / html代码创建的,其中q是用户选择的提供者数量:

for ($i=1; $i<=(intval($q)); $i++)
{
    echo "Name of Anesthesia Provider " . $i . ": ";
    echo "<select name=\"anesthesiaprovider[]\">";
    $result = mysqli_query($con,"SELECT * FROM Anesthesia_Provider ORDER BY Lname");
    if (!(mysqli_query($con, $sql))) {
        echo "<br>";
        echo 'Error in inserting data: ' . mysqli_error($con);
    }

    echo "<option name=\"anesthesiaprovider[]\" value=\"selectprovider\">Anesthesia Provider " . $i . "</option>";

    while($row = mysqli_fetch_array($result))
    {
        echo "<option name=\"reviewer\" value=\"" . $row['Anesthesia_Provider_Number'] . "\">" . $row['Lname'] . ", " . $row['Fname'] . "</option>";
    }   
    echo "</select>";
    echo "<br>";
    echo "<br>";
}

我想使用javascript来确保为每个框选择一个提供程序。如果未选择一个,则以黄色突出显示。这是我的javascript代码,它验证表单onsubmit:

function validateQualityReport(theForm)
{
    var reason = "";
    reason += validateCase(theForm.case);
    reason += validateAnesthesiologists(theForm.element['anesthesiaprovider[]'])

    if (reason != "") {
        alert("Some fields need correction:\n" + reason);
        return false;
    }
    alert("All fields are filled correctly");
    return false;
}

function validateAnesthesiologists(fld){
    var error = "";
    alert(fld.length);
    for (var i = 0; i < fld.length; i++) {
        if (fld[i].value =="selectprovider"){
            fld[i].style.background = 'Yellow';
            error += "Make a selection for provider " + (i+1).toString() + "\n";
        }else{
            fld[i].style.background = 'White';
        }
    }
    return error;
}

除了选择一个提供者之外,该代码适用于所有其他内容。然后它说fld.length是56(所以下拉框中的所有内容),当它突出显示时,它不突出显示整个下拉列表,它只突出显示第一个下拉列表。这里发生了什么? 我在这里先向您的帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

你的问题有些令人困惑,但据我所知,唯一的第一个元素被“突出显示”为黄色,因为你是专门为它过滤的:     if (fld[i].value =="selectprovider"){ fld[i].style.background = 'Yellow';

如果您更改了else语句     fld[i].style.background = 'White'; 至     fld[i].style.background = 'Yellow'; 列表中的其余元素也将“突出显示”。

通过使用node.children.lengthnode.children[i]

,我个人也可以通过使用{{1}}和{{1}}来改变您选择的孩子的循环。

答案 1 :(得分:0)

您的PHP代码需要进行以下更改

// move sql query out of loop as don't need to read 'q' times
$result = mysqli_query($con,"SELECT * FROM Anesthesia_Provider ORDER BY Lname");
if (!(mysqli_query($con, $sql))) {
    echo '<br>Error in inserting data: ' . mysqli_error($con);
} else {

for ($i=1; $i<=(intval($q)); $i++)
{
    echo "Name of Anesthesia Provider " . $i . ": ";
    echo "<select name=\"anesthesiaprovider[]\">";

    // remove name attribute as invalid HTML
    echo "<option value=\"selectprovider\">Anesthesia Provider " . $i . "</option>";
    // move to start of result - untested but should work
    $result->data_seek(0);
    // loop through results
    while($row = mysqli_fetch_array($result))
    {
        echo "<option value=\"" . $row['Anesthesia_Provider_Number'] . "\">" . $row['Lname'] . ", " . $row['Fname'] . "</option>";
    }   
    echo "</select>";
    echo "<br>";
    echo "<br>";
}}

您的JavaScript代码现在应该只找到与每个&lt; select&gt;相关联的麻醉提供者[]。元素而不是&lt;选项&gt;元素。这就是突出显示不正确的原因。

如果只显示一个列表框,我不知道你为什么得到数字56。