Итератор полезен, когда Вы имеете дело с Наборами в Java.
Использование Для - Каждый цикл (Java1.5) для итерации по набору или массиву или списку.
Так есть ли идея заблокировать страницу, запустить несколько запросов ajax (связанных или других), а затем разблокировать страницу?
Если это так (и я понял вопрос правильно) тогда вы могли бы использовать счетчик блоков?
например var blockcounter = 0;
function block(){
if(blockcounter==0)
{$.blockUI({message: "Hai", showOverlay:true});}
blockcounter++;
}
function unblock(){
blockcounter--;
if(blockcounter==0)
{$.unblockUI();}
}
тогда в вашем коде
function dostuff(){
block();
... do whatever ajax you need
... call unblock() in the success event of your ajax call
}
function dostuff2(){
block();
... do some more ajax - this might take a bit longer to complete though
... call unblock() in the success event
}
dostuff();
dostuff2();
Блокировка должна происходить только тогда, и вы можете делать все, что в середине.
Я успешно использую этот метод на веб-сайте, где происходит несколько событий между блокировкой и разблокировкой и где различные события ajax могут завершаться в разное время. Если вы заключите все в пространство имен, вы также можете избежать захламления места глобальными варами.
стоило мне закончить этот скрипт, надеюсь, он полезен:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
//ini plugin
jQuery.event.freezeEvents = function(elem) {
if (typeof(jQuery._funcFreeze)=="undefined")
jQuery._funcFreeze = [];
if (typeof(jQuery._funcNull)=="undefined")
jQuery._funcNull = function(){ };
// don't do events on text and comment nodes
if ( elem.nodeType == 3 || elem.nodeType == 8 )
return;
var events = jQuery.data(elem, "events"), ret, index;
if ( events ) {
for ( var type in events )
{
if ( events[type] ) {
var namespaces = type.split(".");
type = namespaces.shift();
var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
for ( var handle in events[type] )
if ( namespace.test(events[type][handle].type) ){
if (events[type][handle] != jQuery._funcNull){
jQuery._funcFreeze["events_freeze_" + handle] = events[type][handle];
events[type][handle] = jQuery._funcNull;
}
}
}
}
}
}
jQuery.event.unFreezeEvents = function(elem) {
// don't do events on text and comment nodes
if ( elem.nodeType == 3 || elem.nodeType == 8 )
return;
var events = jQuery.data(elem, "events"), ret, index;
if ( events ) {
for ( var type in events )
{
if ( events[type] ) {
var namespaces = type.split(".");
type = namespaces.shift();
for ( var handle in events[type] )
if (events[type][handle]==jQuery._funcNull)
events[type][handle] = jQuery._funcFreeze["events_freeze_" + handle];
}
}
}
}
jQuery.fn.freezeEvents = function() {
return this.each(function(){
jQuery.event.freezeEvents(this);
});
};
jQuery.fn.unFreezeEvents = function() {
return this.each(function(){
jQuery.event.unFreezeEvents(this);
});
};
//end plugin
jQuery("#test1").ajaxStart(function test1(){
jQuery("#result").append('test1 ajaxStop<br>');
});
jQuery("#test1").ajaxStop(function test2(){
jQuery("#result").append('test1 click<br>');
});
jQuery("#test1").bind("click", function test3(){
jQuery("#result").append('test1 click<br>');
});
jQuery("#test2").bind("click", function test5(){
jQuery("#result").append('test2 click<br>');
});
jQuery("#freez").click(function(){
jQuery("#test1").freezeEvents();
jQuery("#test2").freezeEvents();
});
jQuery("#unfreez").click(function(){
jQuery("#test1").unFreezeEvents();
jQuery("#test2").unFreezeEvents();
});
});
</script>
</head>
<body>
<button id="freez">freez</button>
<button id="unfreez">un freez</button>
<br />
<div id="test1">test1 click mousemove</div>
<div id="test2">test2 click mousemove</div>
<br />
<div id="result"></div>
</body>
</html>
Самый простой способ сделать это - добавить проверку в начале связанного метода, чтобы определить, следует ли запускать метод. Если нет, просто вернитесь из метода.
var doThing = true;
$("#foo").bind("click", function(e) {
if(!doThing){return;}
//do thing
}
function bar(){
//temp unbind click
doThing = false;
//do stuff...
//rebind click
doThing = true;
}