Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Ajax 对话框中的Jquery加载以指数形式重复_Ajax_Jquery Ui_Jquery_Load - Fatal编程技术网

Ajax 对话框中的Jquery加载以指数形式重复

Ajax 对话框中的Jquery加载以指数形式重复,ajax,jquery-ui,jquery,load,Ajax,Jquery Ui,Jquery,Load,我对jQuery和/或jQuery UI对话框有一个非常恼人的问题 单击一个特殊链接后,将弹出一个模式对话框,其中包含一些加载的内容(ajax),在加载的内容中有新的链接/按钮,这些链接/按钮在同一个div框中加载它们的url,因此对话框仍然加载,但随后会加载新内容。问题是,如果你在这个链接上链接(在一个新加载的对话框和一个最近重新加载的网站上),它会正常工作,但是第二次点击它会加载url两次,第三次点击它会加载4次。。。它随着对话框中加载的每个新链接呈指数级增长。我使用存储在$\u会话中的计数

我对jQuery和/或jQuery UI对话框有一个非常恼人的问题

单击一个特殊链接后,将弹出一个模式对话框,其中包含一些加载的内容(ajax),在加载的内容中有新的链接/按钮,这些链接/按钮在同一个div框中加载它们的url,因此对话框仍然加载,但随后会加载新内容。问题是,如果你在这个链接上链接(在一个新加载的对话框和一个最近重新加载的网站上),它会正常工作,但是第二次点击它会加载url两次,第三次点击它会加载4次。。。它随着对话框中加载的每个新链接呈指数级增长。我使用存储在$\u会话中的计数器进行测试

这是Javascript代码:

var somedialog = $('<div></div>').dialog({
  autoOpen: false,
  resizable: false,
  modal: true,
  /*show: 'fade',
  hide: 'puff',*/
  closeOnEscape: true,
  close: function(){
  }
 });
 function openInDialog(url, title, width, height)
 {
  somedialog.empty();
  somedialog.dialog("option", "width", width);
  somedialog.dialog("option", "height", height);
  somedialog.dialog("option", "title", title);
  somedialog.load(url,{},function (responseText, textStatus, XMLHttpRequest)
   {
    somedialog.dialog('open');
   }
  );

  //somedialog.load(url,{},function (responseText, textStatus, XMLHttpRequest){
  // dialogdiv.somedialog('open');
  //});
 }

 $('a.ajaxBuyItemDialog').on('click',function(){
  openInDialog(this.href, this.title, 400, 300);
  //prevent the browser to follow the link
  return false;
 });
var somedialog=$('').dialog({
自动打开:错误,
可调整大小:false,
莫代尔:是的,
/*节目:“褪色”,
隐藏:“喘息”*/
closeOnEscape:没错,
关闭:函数(){
}
});
函数openInDialog(url、标题、宽度、高度)
{
somedialog.empty();
对话框(“选项”、“宽度”、“宽度”);
对话框(“选项”、“高度”、“高度”);
对话框(“选项”、“标题”、“标题”);
加载(url,{},函数(responseText,textStatus,XMLHttpRequest)
{
somedialog.dialog('open');
}
);
//加载(url,{},函数(responseText,textStatus,XMLHttpRequest){
//dialogdiv.somedialog(“打开”);
//});
}
$('a.ajaxBuyItemDialog')。在('click',function()上{
openInDialog(this.href,this.title,400300);
//阻止浏览器跟随链接
返回false;
});
似乎有人在讨论这个问题,但这不是一个非常有效的讨论:

谢谢你的帮助

编辑: 这是代码的一部分,位于加载的脚本中:

$("#_BUYITEM_FORM").live('submit', function(){
    $.ajax({ // create an AJAX call...
        data: $(this).serialize(), // get the form data
        type: $(this).attr('method'), // GET or POST
        url: $(this).attr('action'), // the file to call
        success: function(response){ // on success..
            $("#_BUYITEM_CONTENT").html('<p class="AjaxLoaderImg"><span>Einen Moment bitte...</span></p>');
            $("#_BUYITEM_CONTENT").html(response); // update the DIV
        }
    });
    return false; // cancel original event to prevent form submitting
});
$(“##_BUYITEM_FORM”).live('submit',function(){
$.ajax({//创建一个ajax调用。。。
数据:$(this).serialize(),//获取表单数据
类型:$(this.attr('method'),//GET或POST
url:$(this.attr('action'),//要调用的文件
成功:函数(响应){//on success。。
$(“##(BUYITEM)CONTENT“).html(”

Einen-time-bite…

); $(“#_BUYITEM_CONTENT”).html(响应);//更新DIV } }); return false;//取消原始事件以阻止表单提交 });

如果没有它,我无法让它用新内容刷新对话框。

似乎在单击的每个
$('a.ajaxBuyItemDialog')
目标页面中都复制了您的javascript代码。每次单击时再次将该脚本添加到对话框会导致事件被多次触发。

似乎您的javascript代码在每次单击的目标页面中都会被复制。每次单击时再次将该脚本添加到对话框会导致事件被触发不止一次。

如果多次重新加载该脚本,则自使用live()以来,每次都会添加一个新的提交处理程序

live()将处理程序委托给文档,因此只能调用一次,或者每次加载脚本之前需要调用die()


如果要放弃使用live(),可以将提交处理程序移动到load()的成功回调,并使用submit()而不是live()。如果替换了原始表单…原始submit()事件处理程序也将消失

如果多次重新加载脚本,则自使用live()以来,每次都会向表单添加一个新的提交处理程序

live()将处理程序委托给文档,因此只能调用一次,或者每次加载脚本之前需要调用die()

如果要放弃使用live(),可以将提交处理程序移动到load()的成功回调,并使用submit()而不是live()。如果替换了原始表单…原始submit()事件处理程序也将消失

“脏”解决方案

“肮脏”解决方案


此代码在url中是否加载了多次?编辑了主问题此代码在url中是否加载了多次?编辑了主问题当您使用诸如live()之类的委派方法时,处理程序将委派给将来也匹配的元素。如果您更改了所需的内容,
$(“#_BUYITEM_FORM”).submit(函数(){
只要您替换完整表单,问题就会停止,实际上不确定什么代码在哪里运行..可能不是提交,如果您继续加载标签点击处理程序也会有问题。首先,使用openInDialog函数打开带有链接的对话框。对话框中是一个表单(id=\u BUYITEM\u表单)。此表单加载另一个表单(id=\u BUYITEM\u表单,如果需要可以更改)进入对话框并替换旧的。新表单加载结果页,再次替换对话框中的内容。在此之后,对话框将关闭。当对话框再次打开时,每个表单发送其请求两次。关闭对话框并再次打开时,表单发送其请求三次。您正在加载相同的代码,并重复dly或者是从ajax加载的html表单中。或者是在ajax成功中反复触发同一个处理程序。我发布了一个新的答案。有没有更好的方法?当您使用诸如live()之类的委托方法时,该处理程序将被委托给将来也匹配的元素。如果您更改所需的内容,
$(“#u BUYITEM_form”).submit(函数(){
只要您替换完整表单,问题就会停止,实际上不确定什么代码在哪里运行..可能不是提交,如果您继续加载标签点击处理程序也会有问题。首先,使用openInDialog函数打开带有链接的对话框。对话框中是一个表单(id=\u BUYITEM\u表单)。此表单将另一个表单(id=\u BUYITEM\u表单,如果需要可以更改)加载到对话框中,并替换旧表单。新表单将加载结果页,再次替换对话框中的内容。在此之后,对话框将为clos
function watchBuyItemForm(){
        $("#_BUYITEM_FORM").submit(function(){
            $.ajax({ // create an AJAX call...
                data: $(this).serialize(), // get the form data
                type: $(this).attr('method'), // GET or POST
                url: $(this).attr('action'), // the file to call
                success: function(response){ // on success..
                    somedialog.html(ajaxLoader);
                    somedialog.html(response); // update the DIV
                    watchBuyItemForm();
                }
            });
            return false; // cancel original event to prevent form submitting
        });
    }