使用Setinveral的JQuery .load,在刷新时会重置某些功能并禁用它们

时间:2014-03-04 17:14:24

标签: javascript jquery css ajax setinterval

所以我使用jquery .load来自动刷新页面中的DIV。

var refreshId = setInterval(function() {loadAdminTab()}, 30000);

});

function loadAdminTab(){
    $( "#maintab" ).load( "admintab2.php", function() {
        $('#loadingsq').fadeOut(0);
    });
}

我还在$(document).ready load中运行“loadAdminTab”。在初始加载时,加载的DIV中的所有函数都能正常工作。但是,在第一个间隔运行之后。加载的DIV中的某些功能停止工作。

如:

< input type="button" id="showdivitem1" value="Button" ><br>
< div id="item1" style="display:none;" >Div Display</div>

<script>
  $('#showdivitem1').mousedown(function(){
     $('#item1').show();
  });
</script>

就像我说的那样,在页面初始加载之后,一切都很顺利,但是一旦后续的.loads运行,$('#item1').show();将无法在我的生活中工作。

正在加载的文档和div中重置某些内容。


这是我的确切代码,它仍然没有在#maintab中触发。这个代码再次出现在维护者中,而不是在父母之外,是问题吗?

$('#maintab').on('mousedown','#transferCall<?php echo $callid; ?>', function(){
    $('#transfer<?php echo $callid; ?>').css('display','block');
}); 

1 个答案:

答案 0 :(得分:3)

由于您正在将内容重写为#maintab,因此,如果新请求更改其内容,则您在DOMready定义一次的所有事件处理程序(对于其中的节点)将无法工作(即使注入该容器内的新元素是相同的:定义的处理程序附加到不再存在的节点上。

所以你需要使用event delegation并在#maintab(或父元素)上捕捉你的事件


E.g。你的例子变成了

$('#maintab').on('mousedown', '#showdivitem1', function(){
   $('#item1').show();
});

您正在将处理程序设置为#maintab(在每个ajax请求时都不会删除该节点),这会捕获mousedown元素中#showdivitem1事件的传播