我正在将jQuery与form plugin结合使用,我想在提交之前拦截表单数据并进行更改。
表单插件有一个名为beforeSubmit的属性,应该这样做,但我似乎无法获取我指定运行的函数。
这是表单的标记(省略了一些样式细节):
<form id="form1">
<fieldset id="login">
<legend>Please Log In</legend>
<label for="txtLogin">Login</label>
<input id="txtLogin" type="text" />
<label for="txtPassword">Password</label>
<input id="txtPassword" type="password" />
<button type="submit" id="btnLogin">Log In</button>
</fieldset>
</form>
这是我到目前为止的javascript:
$(document).ready(function() {
var options = {
method: 'post',
url: 'Login.aspx',
beforeSubmit: function(formData, form, options) {
$.each(formData, function() { log.info(this.value); });
return true;
}
};
$('form#form1').ajaxForm(options);
});
(log.info()来自我正在使用的Blackbird调试器库)
当我单击提交按钮时,而不是我指定的POST动词,而不是使用GET,并且我的beforeSubmit函数没有记录任何内容。似乎ajaxForm插件根本没有应用于表单,但我不明白为什么。任何人都可以帮忙吗?
答案 0 :(得分:3)
我通过firebug运行以下代码,它似乎与广告一样,但是beforeSubmit回调中的formData变量为空,因为你没有在文本框中设置name属性。
<script type="text/javascript">
$(document).ready(function() {
var options = {
beforeSubmit: showData
};
$('form#form1').ajaxForm(options);
});
function showData(formData, form, options) {
//var formData = [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ];
$.each(formData, function(i, obj) { log.info(obj.name + " | " + obj.value); });
return true;
}
</script>
<form id="form1" action="Login.aspx" method="post">
<fieldset id="login">
<legend>Please Log In</legend>
<label for="txtLogin">Login</label>
<input id="txtLogin" type="text" name="User" />
<label for="txtPassword">Password</label>
<input id="txtPassword" type="password" name="Pass" />
<button type="submit" id="btnLogin">Log In</button>
</fieldset>
</form>
答案 1 :(得分:1)
对于初学者,根据this API,您的选项对象应使用type
而不是method
,或者只在HTML中指定表单上的方法属性。
(现在我会抛出几个小风格的笔记;如果你愿意,你可以在这里停止阅读):
$(document).ready(function...
替换$(function...
。 $.each(formData, function...
看起来更自然$(formData).each(function...