我有一个登录表单,但我想检查字段是否为空,然后不提交。我在提交时“返回false”,但浏览器仍会加载新页面。我怎么能阻止它?
JS:
var username = document.getElementById('usernameField');
var password = document.getElementById('passwordField');
var loginBtn = document.getElementById('loginBtn');
var infoBox = document.getElementById('formInfo');
var isEmpty = /^\s*$/;
var addEventTo = function(id, type, fn, capture) {
if (document.addEventListener) {
id.addEventListener(type, fn, capture);
} else {
id.attachEvent('on'+type, fn);
}
};
function checkIfAllEmpty() {
var loginForm = document.getElementById('loginform'),
allInputs = loginForm.getElementsByTagName('input'),
max = allInputs.length,
i;
for (i = 0; i < max; i++) {
if (allInputs[i].type !== 'submit') {
if (allInputs[i].match(isEmpty)) {
infoBox.innerHTML = 'All your fields are empty';
return false;
}
}
}
}
//addEventTo(loginBtn, 'click', checkIfAllEmpty, false);
if (document.addEventListener) {
loginBtn.addEventListener('submit', checkIfAllEmpty, false);
} else {
loginBtn.attachEvent('onsubmit', checkIfAllEmpty);
}
HTML:
<p id="formInfo"></p>
<form id="loginForm" method="post" action="#">
<fieldset id="loginFieldset">
<legend>Sign in</legend>
<ol>
<li>
<label for="usernameField">Username</label><input type="text" placeholder="Enter username" id="usernameField" />
<span>Please type in your username</span>
</li>
<li>
<label for="passwordField">Password</label><input type="password" placeholder="Enter password" id="passwordField" />
<span>Please type your password</span>
</li>
<li>
<input type="submit" value="Sign in" id="loginBtn" />
</li>
</ol>
</fieldset>
</form>
非常感谢
答案 0 :(得分:7)
如果可以使用html5(适用于较新版本的Safari,Chrome,Firefox,Opera&gt; 11.00但不像往常一样使用IE),您可以在输入字段中添加所需的标记。
<p id="formInfo"></p>
<form id="loginForm" method="post" action="#">
<fieldset id="loginFieldset">
<legend>Sign in</legend>
<ol>
<li>
<label for="usernameField">Username</label>
<input type="text" placeholder="Enter username" id="usernameField" required />
<span>Please type in your username</span>
</li>
<li>
<label for="passwordField">Password</label>
<input type="password" placeholder="Enter password" id="passwordField" required />
<span>Please type your password</span>
</li>
<li>
<input type="submit" value="Sign in" id="loginBtn" />
</li>
</ol>
</fieldset>
答案 1 :(得分:6)
看起来onsubmit的事件监听器没有被正确添加,无论如何最简单的方法是在你的表单中添加onsubmit =“return someValidationFuncThatReturnTrueOrFalse()”:
<form id="loginForm" method="post" action="#" onsubmit="return validate()">
我可以问你为什么在你的js代码上使用这种方法吗?如果你的表格是静态的,那么它可以很容易地完成......
function validate() {
if (document.getElementById("usernameField").value == "" && document.getElementById("usernameField").value == "") {
alert("all fields are empty");
return false;
} else {
return true;
}
}
或类似的......
答案 2 :(得分:1)
您可以使用属性disabled =&#34;禁用&#34;对于表单输入:
http://www.w3schools.com/tags/att_input_disabled.asp
将提交按钮设置为禁用,然后为每个输入字段添加一个onchange侦听器,这样如果每个字段都填满,则删除disable属性,用户可以对该表单进行子设置。
答案 3 :(得分:1)
我使用Prototype(作为javascript框架),这段代码应该可以工作:
JS:
function checkEmpties() {
var usr = $('username');
var pass = $('pass');
var frm = $('formId');
if (usr.value && pass.value) {
//frm.submit();
alert('submit');
} else {
alert('failed');
}
}
Event.observe(window, 'DomReady', function() {
var btn = $('submitBtn');
Event.observe('submitBtn', 'click', checkEmpties);
}
HTML:
<form id="formId">
<input type="text" name="username" id="username" />
<input type="password" name="pass" id="pass" />
<input type="button" id="submitBtn" value="Send" />
</form>
它的作用: 文档加载后,将事件观察者附加到按钮,因此当单击它时,将调用函数checkEmpties。 此函数将检索输入的值,如果它们不为空,请提交表单。
希望有所帮助