使用html表单提交运行javascript代码
嘿,我正在使用一个html表单,用于将人们登录到我的网站,我正在构建它,以便它使用AJAX(jQuery),但我遇到了一些问题 下面是JavaScript:使用html表单提交运行javascript代码,javascript,jquery,forms,function,submit,Javascript,Jquery,Forms,Function,Submit,嘿,我正在使用一个html表单,用于将人们登录到我的网站,我正在构建它,以便它使用AJAX(jQuery),但我遇到了一些问题 下面是JavaScript: function validateLoginDetails() { $('[name=loginUser]').click(function() { $("#mainWrap").css({ width:"600px", height:"200px" }); $("#interfaceScreen")
function validateLoginDetails() {
$('[name=loginUser]').click(function() {
$("#mainWrap").css({ width:"600px", height:"200px" });
$("#interfaceScreen").load("modules/web/loginForm.php?username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password));
});
}
以下是html表单:
<form id="formLogin" name="loginUser" method="post">
Username<br /><input id="username" name="username" type="text" maxlength="30" style="width:160px; border:solid 1px #444444;" /><br /><br />
Password<br /><input id="password" name="password" type="password" maxlength="50" style="width:160px; border:solid 1px #444444;" /><br /><br />
<input id="submit" type="submit" value="Play" style="width:100px; background:#FFFFFF; border:solid 1px #444444;" />
</form>
用户名
密码
问题是,当我提交表单时,它运行代码,但又返回到以前的状态,这听起来可能很奇怪,但我可以说,因为我可以看到它更改了div大小,然后又恢复到原来的大小
有什么想法吗
编辑:例如,如果我使用下面的链接运行代码,那么它可以正常工作
<a href="#" name="loginUser">Clicky</a>
您需要从处理程序返回false,以便在执行AJAX调用后它不会执行实际的表单post 这是我要做的
$(function() {
$('#formLogin').submit( function() {
$('#mainWrap').css( { width: '600px', height: '200px' });
$.post( 'modules/web/loginForm.php',
$(this).serialize(),
function(data) {
$('#interfaceScreen').html(data);
}
);
return false;
});
});
请注意,我使用post来确保URL(包括用户名和密码)不会最终暴露在web日志中。我还假设包含表单的页面是通过https加载的,因此,post也将受到保护。您需要从处理程序返回false,以便它在执行AJAX调用后不会执行实际的表单post 这是我要做的
$(function() {
$('#formLogin').submit( function() {
$('#mainWrap').css( { width: '600px', height: '200px' });
$.post( 'modules/web/loginForm.php',
$(this).serialize(),
function(data) {
$('#interfaceScreen').html(data);
}
);
return false;
});
});
请注意,我使用post来确保URL(包括用户名和密码)不会最终暴露在web日志中。我还假设包含表单的页面是通过https加载的,因此,帖子也将得到保护。我非常肯定tvanfosson的路径是正确的。尝试将return false上移到click函数中,或者尝试取消事件
$('[name=loginUser]').click(function() {
//do stuff
return false;
});
or
$('[name=loginUser]').click(function(e) {
e.cancel();
});
我很肯定特凡福森走的是正确的道路。尝试将return false上移到click函数中,或者尝试取消事件
$('[name=loginUser]').click(function() {
//do stuff
return false;
});
or
$('[name=loginUser]').click(function(e) {
e.cancel();
});
首先,您是否确认您的.php文件正在返回内容而不是错误?如果插入内容(使用
$load
),则在预期内容(来自load)成功返回(例如使用回调)之前,不应触发div上的CSS命令。另外,我建议使用.submit()
,这是一个特定于表单的函数,直接引用表单标记和/或id来加快搜索速度(不要让jquery在DOM中搜索那么多内容)
函数validateLoginDetails(){
$('#formLogin')。提交(函数(){
//使用load(url,{data:toPOST},回调(如果成功));
$(“#interfaceScreen”).load(“modules/web/loginForm.php?”,
{“用户名”:encodeURIComponent(用户名),“密码”:encodeURIComponent(密码)},
函数(){$(“#mainWrap”).toggleClass('loadSuccess');}
);//端部载荷
});//结束提交
返回false;
}
这可能更有效,也不那么突兀,但我想让它保持可识别性。其他人是对的…如果您的Div恢复到其原始大小…这是因为页面被允许重新加载…在这种情况下,浏览器将应用您的初始Div宽度/高度…因为您的备用宽度/高度仅由jquery onsubmit应用
重述:
$load
内置功能传递值对是对象{name:val}
首先,您是否确认您的.php文件正在返回内容而不是错误?如果插入内容(使用
$load
),则在预期内容(来自load)成功返回(例如使用回调)之前,不应触发div上的CSS命令。另外,我建议使用.submit()
,这是一个特定于表单的函数,直接引用表单标记和/或id来加快搜索速度(不要让jquery在DOM中搜索那么多内容)
函数validateLoginDetails(){
$('#formLogin')。提交(函数(){
//使用load(url,{data:toPOST},回调(如果成功));
$(“#interfaceScreen”).load(“modules/web/loginForm.php?”,
{“用户名”:encodeURIComponent(用户名),“密码”:encodeURIComponent(密码)},
函数(){$(“#mainWrap”).toggleClass('loadSuccess');}
);//端部载荷
});//结束提交
返回false;
}
这可能更有效,也不那么突兀,但我想让它保持可识别性。其他人是对的…如果您的Div恢复到其原始大小…这是因为页面被允许重新加载…在这种情况下,浏览器将应用您的初始Div宽度/高度…因为您的备用宽度/高度仅由jquery onsubmit应用
重述:
$load
内置功能传递值对是对象{name:val}
如果您正在处理表单提交,那么实际上应该选择.form()事件处理程序,而不是.click()事件处理程序。对于前者,如果表单是通过任何其他方法提交的,那么您的检查仍将运行,而单击则取决于触发操作的单个元素。您还需要在此事件上返回false或preventDefault(),以便您的函数实际上能够正确启动 另一件事(根据您提供的代码采样,这可能很小/不重要)是,您正在将事件处理程序绑定到一个必须调用的函数中——为什么不将其加载到document ready上,就像这样(见下文) 我个人会像这样修改您的代码:
$(document).ready(function() {
$('#formLogin').submit(function() {
$("#mainWrap").css({ width:"600px", height:"200px" });
$("#interfaceScreen").load("modules/web/loginForm.php?username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password));
return false;
});
});
如果您正在处理表单提交,您应该真正选择.form()