2016-04-21 44 views
0

我正在開發通用Windows 8.1應用程序,並且我有一個用於創建新聯繫人的頁面。 爲了驗證輸入字段,我把它們放在窗體中。我的表單動作不應該去服務它只需要驗證字段並調用自定義函數。具有自定義函數調用的HTML表單

HTML:

<form name="myform" onSubmit="JavaScript:OnSubmitForm()"> 
    <div> 
     <label> 
      First name<br /> 
      <input id="contactFirstName" class="win-textbox" type="text" name="firstName" required /> 
     </label> 
    </div> 
    <div> 
     <label> 
      Last name<br /> 
      <input id="contactLastName" class="win-textbox" type="text" name="lastName" /> 
     </label> 
    </div> 
    <input type="submit" value="Submit"/> 
    <input type="button" value="Cancel"/> 
</form> 

的JavaScript:

document.addEventListener('DOMContentLoaded', function() { 
    function OnSubmitForm() 
    { 
     alert('click'); 
    } 
}); 

我的提醒是從來沒有在普通的HTML項目無論是在WinJS應用程序調用。我也試過:

<form name="myform" onsubmit="return OnSubmitForm();"> 

和相同。

難道這是一個很好的方法嗎?使用表單只是用於輸入字段驗證還是有更好的方法,以及爲什麼這不起作用?

+0

你看到錯誤日誌中未定義的功能或某事的瀏覽器的控制檯? –

+0

我看到錯誤「未捕獲的引用」記錄在控制檯上的按鈕單擊,但錯誤只是眨眼,我無法捕捉它。提交後,輸入字段也是空的,就像一切正常。 – Milos

+0

在函數OnSubmitForm()中返回false,以便您的頁面不重定向,並且您可以看到錯誤。 –

回答

1

嵌入式event-binding預計功能在global-scope之下,這就是不應該使用它的原因之一!

在你的例子中,OnSubmitFormDOMContentLoaded處理程序的本地範圍內。最好的方法是使用addEventListener和當前代碼,將OnSubmitForm用於DOMContentLoaded之外。

document.getElementById('myform').addEventListener('submit', function(e) { 
 
    e.preventDefault(); //to prevent form submission 
 
    alert('click'); 
 
});
<form name="myform" id='myform'> 
 
    <div> 
 
    <label> 
 
     First name 
 
     <br /> 
 
     <input id="contactFirstName" class="win-textbox" type="text" name="firstName" required /> 
 
    </label> 
 
    </div> 
 
    <div> 
 
    <label> 
 
     Last name 
 
     <br /> 
 
     <input id="contactLastName" class="win-textbox" type="text" name="lastName" /> 
 
    </label> 
 
    </div> 
 
    <input type="submit" value="Submit" /> 
 
    <input type="button" value="Cancel" /> 
 
</form>

隨着電流的方法:

function OnSubmitForm() { 
 
    alert('click'); 
 
}
<form name="myform" onSubmit="JavaScript:OnSubmitForm()"> 
 
    <div> 
 
    <label> 
 
     First name 
 
     <br /> 
 
     <input id="contactFirstName" class="win-textbox" type="text" name="firstName" required /> 
 
    </label> 
 
    </div> 
 
    <div> 
 
    <label> 
 
     Last name 
 
     <br /> 
 
     <input id="contactLastName" class="win-textbox" type="text" name="lastName" /> 
 
    </label> 
 
    </div> 
 
    <input type="submit" value="Submit" /> 
 
    <input type="button" value="Cancel" /> 
 
</form>

+0

非常感謝,它解決了我所有的問題。 e.preventDefault();在這裏也是重要的事情。 – Milos

+0

@米洛斯,是啊!你必須有條件,如果你想提交一個'表格'是所有的驗證都經過很好的測試! – Rayon

0

你試過parsley.js

我創建了fiddle向您展示了一個快速示例。

<form name="myform"> 
<div> 
    <label> 
     First name<br /> 
     <input id="contactFirstName" data-parsley-required-message="First name required" class="win-textbox" type="text" name="firstName" required data-parsley-trigger="change focusout" data-parsley-pattern="/^[a-zA-Z]*$/"/> 
    </label> 
</div> 
<div> 
    <label> 
     Last name<br /> 
     <input id="contactLastName" class="win-textbox" type="text" name="lastName" /> 
    </label> 
</div> 
<input type="submit" value="Submit"/> 
<input type="button" value="Cancel"/> 

<script src="http://parsleyjs.org/dist/parsley.js"></script> 
<script> 
    window.ParsleyConfig = { 
     errorsWrapper: '<div></div>', 
     errorTemplate: '<div class="alert alert-danger parsley" role="alert"></div>', 
     errorClass: 'has-error', 
     successClass: 'has-success' 
    }; 
</script> 
+0

我從來沒有試過這個庫。這是我的第一個問題的答案是否有任何更好/其他方式進行輸入字段驗證? – Milos