我正在使用以下代码尝试更改输入框的边框颜色,并在字段为空时阻止表单提交。
虽然这改变了边框颜色,表格仍然提交,有人可以告诉我我在哪里出错了,提前谢谢
<div class="home_column">
<div class="login_form">
<form name="login" id="login" action="include/validate_login.php" method="post" onsubmit="return validateForm()">
<h21>Username</h21><br/>
<input type="text" class="login_form_front" id="myusername" name="myusername"><br/>
<h21>Password</h21><br/>
<input type="password" class="login_form_front" autocomplete="off" id="mypassword" name="mypassword"><br/>
<input type="submit" class="buttons_login" value="Login" id="login" name="login">
</form>
</div>
</div>
function validateForm() {
var a = document.forms["login"]["myusername"].value;
var b = document.forms["login"]["mypassword"].value;
if (a == null || a == "" || b == null || b == "") {
if (a == null || a == "") {
document.forms["login"]["myusername"].style.borderColor = "#963634";
}
if (b == null || b == "") {
document.forms["login"]["mypassword"].style.borderColor = "#963634";
}
$(".form_error").show();
$('html,body').animate({
scrollTop: $(".form_error").offset().top - 180
});
return false;
}
}
答案 0 :(得分:0)
此行有错误:
scrollTop: $(".form_error").offset().top - 180
未捕获的TypeError:无法读取属性&#39; top&#39;未定义的
那是因为你提供的html代码中不存在form_error。
使代码中断并在return false
行之前发生错误
其他一切都还可以
答案 1 :(得分:0)
将事件对象传递给事件处理程序并使用event.preventDefault而不是return false;
onsubmit="validateForm(event);">
function validateForm(event) {
// your code
if(conditionToStopSubmit)
event.preventDefault();
}
答案 2 :(得分:0)
你有一个奇怪的混合jQuery和普通的JS代码。试试这个,将事件附加到jQuery中的表单提交,并使用preventDefault
在输入为空时停止发出请求:
<form name="login" id="login" action="include/validate_login.php" method="post">
<!-- your HTML -->
</form>
$('#login').submit(function(e) {
var formValid = true;
var $username = $('#myusername');
var $password = $('#mypassword');
if ($username.val() == '') {
formValid = false;
$username.css('border-color', '#963634');
}
if ($password.val() == '') {
formValid = false;
$password.css('border-color', '#963634');
}
if (!formValid) {
e.preventDefault();
$(".form_error").show();
$(document).animate({
scrollTop: $(".form_error").offset().top - 180
});
}
});
答案 3 :(得分:0)
尝试在输入文字中添加必需
例如
<input type="text" class="login_form_front" id="myusername" name="myusername" required>
答案 4 :(得分:0)
既然你正在使用jQuery,为什么不在jQuery中做所有事情呢?看看我下面的脏版本:
(function($) {
$("#login").on("submit", validate);
function validate(e) {
var $form = $("#login"),
$uname = $form.find("input[name='myusername']"), // or $form.find("input.login_form_front") or $form.find("#myusername")
$pwd = $form.find("input[name='mypassword']"),
unameVal = $.trim($uname.val()) || "", // default ""
pwdVal = $pwd.val() || "", // no trimming as pwd could be spaces
isValid = true;
if (!unameVal) {
$uname.css({ borderColor: 'red' });
isValid = false;
}
if (!pwdVal.length) {
$pwd.css({ borderColor: 'red' });
isValid = false;
}
if (!isValid) {
e.preventDefault();
}
}
}(jQuery));
现场演示:Validate form submit
答案 5 :(得分:0)
<div class="home_column">
<div class="login_form">
<form name="login" id="login" action="include/validate_login.php" method="post" onsubmit="return validateForm()">
<h21>Username</h21><br/>
<input type="text" class="login_form_front" id="myusername" name="myusername" required><br/>
<h21>Password</h21><br/>
<input type="password" class="login_form_front" autocomplete="off" id="mypassword" name="mypassword" required>
<br/>
<input type="submit" class="buttons_login" value="Login" id="login" name="login">
</form>
</div>
</div>
&#13;
尝试此代码,并确保您的浏览器是最新的。
我在这里添加了一个关键字&#34; required&#34;这就够了。