2012-06-25 48 views
1

我的表單在Firefox和IE中工作正常。在調用onsubmit時,它會調用js函數並驗證代碼,如果驗證是好的,那麼它會提交表單。onsubmit不會在Chrome中調用js函數,而是直接提交表單

但是,在chrome中它並未進行驗證,而是直接提交表單。

我不知道爲什麼是這樣,做了很多搜索,但徒勞。

任何幫助將是偉大的解決這個問題。

表格代號:

<form name="myform" action="queryfeedback.php" method="post" onSubmit="return validateForm(myform);"> 
<label for="labelField_Name" id="idLabel_Name"></label> 
<input type="text" name="nameField_Name" id="idField_Name" placeholder="Enter your name here"/> 
<br /> 
<label for="labelField_EMail" id="idLabel_EMail"></label> 
<input name="nameField_EMail" type="text" id="idField_EMail" placeholder="Enter your E-Mail address here" /> 
<br /> 
<label for="labelField_Message" id="idLabel_Message"></label> 
<textarea name="nameField_Message" id="idField_Message" placeholder="Enter your message for us here"></textarea> 
<br /> 
<input type="Submit" name="nameSubmit" id="idButton_Submit" value="Submit" alt="Submit Button"/> 
</form> 

驗證碼:

function validateForm(form) 
{ 
alert(form.nameField_Name.value); 
//alert(formValueEMail.value); 
//alert(formValueMessage.value); 
if(form.nameField_Name.value=='') 
{ 
    alert("Name field is required. Please fill it in."); 
    form.nameField_Name.focus(); 
    form.nameField_Name.select(); 
    return false; 
} 
if(form.nameField_Name.value=='Enter your name here') 
{ 
    alert("Name field is required. Please fill it in."); 
    form.nameField_Name.focus(); 
    form.nameField_Name.select(); 
    return false; 
} 
if(form.nameField_EMail.value=='') 
{ 
    alert("E-Mail Address field is required. Please fill it in."); 
    form.nameField_EMail.focus(); 
    form.nameField_EMail.select(); 
    return false; 
} 
if(form.nameField_EMail.value=='Enter your E-Mail address here') 
{ 
    alert("E-Mail Address field is required. Please fill it in."); 
    form.nameField_EMail.focus(); 
    form.nameField_EMail.select(); 
    return false; 
} 
//Checking for correct format of EMail address. 
var x=document.forms["myform"]["nameField_EMail"].value; 
var atpos=x.indexOf("@"); 
var dotpos=x.lastIndexOf("."); 
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
{ 
    alert("Not a valid e-mail address"); 
    return false; 
} 
if(form.nameField_Message.value=='') 
{ 
    alert("Message field is required. Please fill it in."); 
    form.nameField_Message.focus(); 
    form.nameField_Message.select(); 
    return false; 
} 
if(form.nameField_Message.value=='Enter your message for us here') 
{ 
    alert("Message field is required. Please fill it in."); 
    form.nameField_Message.focus(); 
    form.nameField_Message.select(); 
    return false; 
} 
return true; 
+0

也許你'validateForm'功能無死亡在Chrome完成出於某種原因(例如它停止由於錯誤),所以它永遠不會返回'FALSE'停止提交。在'validateForm'返回finall之前放一個'alert'來查看程序流是否到達有效輸入的函數底部。 – apsillers

回答

0

嘗試傳遞的事件參數和運行event.preventDefault()因此停止提交表單,直到它被驗證。

+0

爲了查看Chrome中我的函數是否被調用,我在函數內部添加了一條警告作爲第一行,以查看我的函數是否被調用。此警報從不顯示,所以這意味着在chrome中按下提交按鈕時甚至不會調用函數。這很奇怪,因爲我不知道如何調試,當我的函數甚至沒有被調用,因爲沒有提出警報,這是我的函數中的第一行。 – user1478475

+0

由於一些奇怪的原因,我的Chrome不支持。奇怪。 – user1478475

0
  1. 你沒有關閉你的函數'validateForm'}。因此它可能會引發錯誤。
  2. 使用onsubmit="return validateForm(this);"注意,屬性名是onsubmit沒有駱駝案及論點是this
  3. validateForm應該是一個全球性的功能。

工作示例:http://jsfiddle.net/qrZ8a/3/

+0

Di您提出的步驟,使功能全局化,使用「this」作爲參數,並在我的後捲曲支架結束時錯過了。所以它最初在我的代碼中。但Chrome仍然直接提交表單而不進行任何驗證。不知道這是否可能有鉻本身的錯誤。 – user1478475

+0

我給你一個工作的例子。如果它仍然不適合你。對不起。 –

相關問題