Javascript Fancybox表单ajax提交,只有一个ajax请求
我有一个关于ajax提交的问题 我有一个html表单Javascript Fancybox表单ajax提交,只有一个ajax请求,javascript,jquery,html,fancybox,Javascript,Jquery,Html,Fancybox,我有一个关于ajax提交的问题 我有一个html表单 <div style="display:none"> <form id="myform" method="post" action=""> <input type="text" id="name" /> <input type="submit" id="sbmt" /> </form> </div> 和按钮打开fanc
<div style="display:none">
<form id="myform" method="post" action="">
<input type="text" id="name" />
<input type="submit" id="sbmt" />
</form>
</div>
和按钮打开fancybox:
<a id="sbtfancybox" href="#myform">
<input type="button" value="Add new"
onClick="defineFancybox();" />
</a>
我用jquery定义了一个fancybox:
<script type="text/javascript">
function defineFancybox() {
$('#sbtfancybox').fancybox({
//...some json parameters
});
$('#myform').submit(function() {//the main problem is here
//....calling an ajax
return false;
});
}
</script>
函数defineFancybox(){
$('sbtfancybox')。fancybox({
//…一些json参数
});
$('#myform').submit(函数(){//主要问题在这里
//…调用ajax
返回false;
});
}
我的问题是如何做$(“#myform”).submit(..)
提交总是被调用一次,而不是如果我第一次打开fancybox,$(“#myform”).submit()被调用一次,如果我第二次打开fancybox,$(“#myform”).submit()被调用两次,如果我第三次打开fancybox,那么$('#myform')。submit()
称为树时间等
谢谢jQuery事件处理程序不会相互重写,即使在再次绑定相同函数的情况下也是如此。每次调用此代码时:
$('#myform').submit(function() {//the main problem is here
//....calling an ajax
return false;
});
添加另一个事件处理程序。由于该代码位于单击按钮时调用的函数中,因此第一次单击将生成一个事件处理程序。第二次单击会添加另一个,因此现在有两个。第三次单击会添加另一个,因此您有三个
由于表单似乎不是动态创建的,因此在加载页面时,您可以只绑定单个事件处理程序:
$(document).ready(function() {
$('#myform').submit(function() {
//....calling an ajax
return false;
});
});
然后将其移出defineFancybox()
函数
如果您必须将事件处理程序绑定保留在该函数中,则可以在绑定新的事件处理程序之前使用(或如果您使用的是1.7之前的版本)函数删除任何现有的事件处理程序:
$('#myform').off('submit').submit(function() {
//....calling an ajax
return false;
});
您是否尝试过使用.one()
处理程序:
$('#myform').one('submit', function() {//This will make it submitted once
//....calling an ajax
return false;
});
你可以这样做
$('#myform').unbind('submit');
$('#myform').bind('submit',function() {//the main problem is here
//....calling an ajax
return false;
});
你可以试试下面的方法
$("#myform").each(function(i) {
var handler = i.on("submit", function() {
handler.stop();
// do stuff
});
// other stuff
});
我需要几个FancyBox来编辑表中的许多记录,所以onClick=“defFP”;是有用的。@user1929552但它总是相同的形式吗?如果是,那么您只需要一个提交处理程序,而不需要将其绑定到创建/初始化fancy box的函数中。但是,如果您确实想/需要将其保存在该函数中,我已经添加了一些额外的信息,允许您这样做。太好了!这有帮助。如果你接受它,这将是更大的。谢谢。这个代码不起作用。传递给传递给.each()
的函数的第一个参数是索引(因此是整数),它没有.on()
函数。