Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Fancybox表单ajax提交,只有一个ajax请求_Javascript_Jquery_Html_Fancybox - Fatal编程技术网

Javascript Fancybox表单ajax提交,只有一个ajax请求

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

我有一个关于ajax提交的问题

我有一个html表单

<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()
函数。