Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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:事件复制_Javascript_Jquery_Events_Asynchronous - Fatal编程技术网

Javascript:事件复制

Javascript:事件复制,javascript,jquery,events,asynchronous,Javascript,Jquery,Events,Asynchronous,我想不出我的代码出了什么问题。 我有两个全局变量,每次按下某个按钮时我都会更改这些变量,还有两个自定义函数执行ajax调用,这些调用返回一段html代码并在下面分页,其工作方式如下: $('#foot #pagination a.page').live('click', function(){ window.mode = 'partial'; window.key = $('input#search').val();

我想不出我的代码出了什么问题。 我有两个全局变量,每次按下某个按钮时我都会更改这些变量,还有两个自定义函数执行ajax调用,这些调用返回一段html代码并在下面分页,其工作方式如下:

    $('#foot #pagination a.page').live('click', function(){
        window.mode = 'partial';        
        window.key = $('input#search').val();           
        window.page = $(this).parent().find('input').val();
        setTimeout('getData();', 0);        
    });
$('#foot').off('click', '#pagination a.page', navigation) // remove event
          .on('click', '#pagination a.page', navigation); // add event

function navigation(e) {
   window.mode = 'partial';        
   window.key = $('input#search').val();           
   window.page = $(e.currentTarget).parent().find('input').val();
   setTimeout('getData();', 0);        
});
有时,当移动到另一个页面时,事件加倍,我得到加倍的html。 在校准getData时;从浏览器控制台-一切正常,就像它必须工作一样。
什么原因会导致这种情况?

您应该在document.ready之后只执行此功能一次。 或者像这样做:

    $('#foot #pagination a.page').live('click', function(){
        window.mode = 'partial';        
        window.key = $('input#search').val();           
        window.page = $(this).parent().find('input').val();
        setTimeout('getData();', 0);        
    });
$('#foot').off('click', '#pagination a.page', navigation) // remove event
          .on('click', '#pagination a.page', navigation); // add event

function navigation(e) {
   window.mode = 'partial';        
   window.key = $('input#search').val();           
   window.page = $(e.currentTarget).parent().find('input').val();
   setTimeout('getData();', 0);        
});

问题是jQuery.live在document ready上将一些数据推送到jQuery堆栈,但在服务器发出ajax响应并再次调用document ready事件之后——在本例中,.live再次将相同的数据推送到jQuery堆栈,这会导致多个事件体调用


我曾经使用过。死在以前。活着,现在一切正常。

永远不要将字符串传递给setInterval或setTimeout。这样做和使用eval一样糟糕,而且一旦使用变量,就会导致代码无法读取,甚至可能不安全,因为您需要将变量插入字符串中,而不是传递实际变量。正确的解决方案是setIntervalfunction{/*您的代码*},msecs;。这同样适用于setTimeout。如果只想调用一个没有任何参数的函数,也可以直接传递函数名:setIntervalsomeFunction,毫秒;请注意,在ajax响应来自服务器并且再次调用document ready事件之后,函数名后面没有任何标记-不,在ajax响应中不会再次调用document.ready。您是否碰巧正在从getData或它调用的任何其他函数调用.live?是的,DOM.ready将加载一组新的事件处理程序。live将再次加载,您是对的,实际上这是一个错误行为。