为什么这个javascript表单验证不起作用?

时间:2010-09-10 02:37:48

标签: javascript validation

我在javascript based on this doc上编写了简单的自定义验证。如果在“Si”上选择了选择并且文本字段留空,我希望它显示警报。我不明白为什么它没有显示消息。

<html> 
<head>


<link rel="stylesheet" type="text/css" media="screen" href="mistylesheet.css"/>

<script type ='text/javascript'>

function mivalidate (elem1, elem2, elem3, elem4) {


     if(elem1.value=="Si")&&(elem2.value.length==0)&&( (elem3.value.length==0)||(elem4.value.length==0)){

        alert("Por favor, especifique un nombre y un email o tel&eacute;fono de contacto en su recomendaci&oacute;n ");
        elem1.focus();
        return false;
      } else {

        return true;
    }


}



</script>

</head>
<body>
<form onsubmit='return mivalidate(document.getElementById("recomiendaONo"),document.getElementById("nombreRecomendado"), document.getElementById("emailRecomendado"), 
 document.getElementById("telefonoRecomendado"))'>

     <table class="layouttable">

        <tr class='row1'><td> <b>&#191;Recomendar&iacute;a nuestros servicios a otra empresa o persona?  </b></td></tr>
        <tr class='row2'><td> 



        <select id = "recomiendaONo" name="recomiendaONo" class="required">
           <option value="">Seleccione su respuesta</option>
             <option value="Si">S&iacute;</option>
         <option value="No">No</option>

        </select>



        </td></tr>


  </table>    






<div class='margenrecomendaciones'>
<table>

<tbody>


<tr>



<td><div align="left">Nombre:</div></td> 

<td><div align="left"><input class="texto" id="nombreRecomendado" name="nombreRecomendado" type="text" size="30"/></div></td>

</tr>      




<td><div align="left">Email:</div></td>

<td><div align="left"> <input  class="texto" id="emailRecomendado" name="emailRecomendado" type="text" size="30"/></div></td>




</tr>

<tr>



<td><div align="left">Tel&eacute;fono:</div></td>

<td><div align="left"> <input class=" texto" name="telefonoRecomendado" id="telefonoRecomendado" type="text" size="30"/></div></td>




</tr>


</tbody>

</table>
</div>

    <input type="submit"/>


</form>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

您需要将整个if条件括在大括号中:

if (...) {
    alert(...);
}

我总是建议在这种情况下使用firebug或类似工具:它会以非常清晰的方式向您显示所有javascript错误。

答案 1 :(得分:0)

您需要将整个if语句包装在括号中。

此:

if (elem1.value == "Si") && (elem2.value.length == 0) && ((elem3.value.length == 0) || (elem4.value.length == 0))

应该是:

if ((elem1.value == "Si") && (elem2.value.length == 0) && ((elem3.value.length == 0) || elem4.value.length == 0)))

(我还在运算符周围添加空格,在if之后添加空格以使所有内容更清晰可读,您也应该这样做。此外,使用文本编辑器或IDE显示匹配的括号确实有助于跟踪它们。)