Деактивирайте всички събития с щракване/клавиш, докато извикването на ajax не завърши

Как бихте деактивирали възможността за задействане на всички връзки, докато извикването на ajax не приключи?

Трябва това да се случи както на .(click) събития, така и на .on('keyup') тригери.

Така че почти това, което искам е;

– Ajax връзката се задейства (чрез щракване или натискане на клавиш)

– Ajax повикването се изпълнява (и докато работи – всички връзки са деактивирани)

– Обаждането на Ajax завършва и връзките се активират отново.


person jaybee    schedule 26.09.2014    source източник


Отговори (2)


Можете да добавите спинера и да го показвате на преден план, докато заявката ви за ajax не бъде успешна. Ето примерен код. Ето един пример.

function OnAjaxStart(ajaxContext) {
$("#spinner").show();
$("a").unbind("click");
$("a").unbind("keyup");
}

function OnAjaxComplete(ajaxContext) {
$("#spinner").hide();
}


function DisplayDataById(actionUrl, data) {
OnAjaxStart();

var request = $.ajax({
url: actionUrl,
data: { data: data},
cache: false
});

request.done(function (data) {
$('#' + divName).empty().html(data);
OnAjaxComplete();
});
}

Ето HTML въртящия се код:

<div id="spinner" style="margin: 0px; padding: 0px; position: fixed; right: 0px;
  top: 0px; width: 100%; height: 100%; background-color: #666666; z-index: 30001;
  opacity: .8; filter: alpha(opacity=70); display: none">
  <p style="position: absolute; top: 30%; left: 45%; color: White;">
    Please wait ...<img src="@Url.Content("~=""/images/loading-image.gif")" alt="Loading">
  </p>
</div>
person Bhasyakarulu Kottakota    schedule 26.09.2014
comment
Съжаляваме, но въпросът беше да се деактивират всички връзки по време на ajax заявка (и докато всички анимации в повикването не завършат) - след това да се активират отново всички връзки, след като повикването приключи. Някои от моите връзки се задействат от on.('keyup') събития, така че ако някой трябваше да натисне клавиш няколко пъти, има вероятност моето оформление да се счупи поради изпълнявани анимации. Благодаря все пак за отговора. @Bhasyakarulu Kottakota - person jaybee; 26.09.2014
comment
Опитайте да добавите unbind към метода OnAjaxStart. - person Bhasyakarulu Kottakota; 26.09.2014
comment
Страхотно, че проработи! Благодаря за помощта, бих гласувал за вашия отговор, но имам нужда от още 4 точки! - person jaybee; 26.09.2014

/*  CSS */
#overlay {
  position: fixed;
  height: 100%;
  width: 100%;
  z-index: 1000000;
}

При повикване на ajax използвайте това

overlay = $("<div id='overlay'></div>").prependTo('body');
    $(document).on("keydown",function(objEvent) {
    if (objEvent.keyCode == 9) {  //tab pressed
        objEvent.preventDefault(); // stops its action
    }
   });

При завършване на повикването на ajax използвайте това

overlay.remove();
$(document).off("keydown");
person Sumeet Patil    schedule 26.09.2014
comment
Това работи за кликвания, но не и за .on('keyup') задействания. - person jaybee; 26.09.2014
comment
Можем да деактивираме клавиша tab с помощта на jquery. Използвайте го, за да премахнете keyup. - person Sumeet Patil; 26.09.2014