Вопрос

Я хочу изменить указатель мыши на символ «подожди», когда мы запускаем вызов Ajax, и вернемся к указателю по умолчанию после завершения вызова. Я пытался следующим образом, но моя проблема в том, что он просто работает над Firefox, пока я не нажимаю/нажимаю кнопку мыши. Вот мой код:

function initializeAjax(url){
    $('html, body').css("cursor", "wait");

    try {
        if (url.substring(0,4) == ".mdf") {
            var database = window.location.pathname.slice(0,window.location.pathname.lastIndexOf('.mdf'));
            var url = database + url;
        }

        initRequest(url);
        returnedValues = null;
        req.onreadystatechange = returnedValues;
        nocache = Math.random();
        req.open("GET", url+"&nocache = "+nocache, false);
        req.send(null);

        $('html, body').css("cursor", "auto");
        return req.responseText;
    }
    catch(err) {
        return "Error 8";
    }
}

Может ли кто -нибудь помочь, как измениться выше, чтобы решить проблему так, что она работает в Firefox и IE.

Это было полезно?

Решение

Посмотрите на метод jQuery Get. Это очень просто в использовании и обрабатывает обратный вызов, так что у вас не будет проблем с добавлением кода для установки курсора мыши ...

http://api.jquery.com/jquery.get/

Пример...

$('html, body').css("cursor", "wait");
$.get("yourajaxcall.url", function(data) {
    $('html, body').css("cursor", "auto");

    //  Success - do something with "data" here

}).error(function() {
    $('html, body').css("cursor", "auto");

    //  There was an error - do something else

});

Другие советы

Как jQuery 1.9, вот как это можно сделать:

$(document).ajaxStart(function ()
{
    $('body').addClass('wait');

}).ajaxComplete(function () {

    $('body').removeClass('wait');

});

CSS

body.wait *, body.wait
{
    cursor: progress !important;
}

Этот пост здесь имеет отличное решение для проблемы.

Вот его решение:

function globalAjaxCursorChange() 
{
  $("html").bind("ajaxStart", function(){
     $(this).addClass('busy');
  }).bind("ajaxStop", function(){
     $(this).removeClass('busy');
  });
}

А затем в CSS:

html.busy, html.busy * {  
  cursor: wait !important;  
}  

Мне нравится подход CSS и переключать класс, а не менять CSS в JavaScript. Похоже, более чистый подход для меня.

Чтобы применить это к вашему коду, вы изменили бы JavaScript, который пытается изменить курсор на просто $(this).addClass('busy'); Затем, когда вы хотите изменить курсор. $(this).removeClass('busy');

Простое и простое решение, просто добавьте следующий код на каждую страницу, которую вы хотите затронуть:

$(document).ajaxStart(function(){ 
    $("body").addClass('ajaxLoading');
});
$(document).ajaxStop(function(){ 
    $("body").removeClass('ajaxLoading');
});

И CSS:

.ajaxLoading {  
  cursor: progress !important;  
}  

Конечно, вы можете изменить это в соответствии с вашими потребностями, но для простого эффективного способа отображения курсора загрузки на каждом вызове Ajax это путь (или, по крайней мере, то, как я бы это сделал).

Ни один из ответов, предоставленных здесь на переполнении стека, не будет работать для меня. Я использую последнюю и лучшую Firefox для разработки, а другие здесь используют IE, Chrome и т. Д. ... Каждый раз, когда я звонил в Ajax от JQUERY, и только когда вызов Ajax вернулся - изменится курсор. Тогда это застряло бы в курсоре ожидания. Итак - вызов сделан, сервер вернул новую информацию, была отображена информация, а затем Wham! Подождите, курсор, и не уйдет. Я попробовал все ответы. Был вызван .ajaxxxxx. (Я установил предупреждение («здесь»); в функции, и те, кто «здесь», все время появлялся. Каждый вызов. Очень удручающий.

Итак, я сказал: «ОК - новые вещи не работают. А как насчет старой школы?» Я знаю, что это неуклюже - но это не какая -то большая большая программа, над которой я работаю. Это просто маленький редактор, поэтому несколько человек могут редактировать нашу базу данных одновременно. Никогда не увижу свет Интернета. Только интранет. :-) В любом случае, это работает и работает ужасно. Вы должны предоставить свой собственный курсор. Я только что взял один из изображений Google для использования.

Сначала - HTML:

<div id='wait' name='wait'
style='position:absolute;top:-9999px;left:-9999px;background-color:rgba(0,0,0,0.3);'>
<table border='0' cellspacing='0' cellpadding='0' style='width:100%;height:100%;'><tbody>
<tr><td style='width:100%;height:50%;'> </td></tr>
<tr><td align='center'><img id='cursor' name='cursor' src="images/wait.gif"></td></tr>
</tbody></table>
</div>

Тогда jQuery:

function waitCursor()
{
    $('#wait').css({
        'top' : '0px',
        'left' : '0px',
        'width' : '100%',
        'height' : '100%'
        });
}

function defCursor()
{
    $('#wait').css({
    'top': '-9999px',
    'left' : '-9999px',
    'width' : '0%',
    'height' : '0%'
    });

а также

$(document).ajaxStart(function(){ waitCursor(); })
    .ajaxComplete(function(){ defCursor(); })
    .ajaxStop(function(){ defCursor(); });

Старая школа, но тоже просто. Просто есть Div с столом. Таблица имеет только ряды. Первый составляет 50% от высоты всего экрана. Второй просто сосредотачивает курсор ожидания на экране. Вы всегда можете сделать высоту первого 45% или каким -то образом половины высоты экрана, минус половина высоты изображения. Но, как я уже сказал, это просто для простой внутренней программы. Дело в том, что это работает на всех браузерах, не пытаясь прыгать через много обручей, чтобы заставить его появиться. Я видел нечто подобное на других крупных сайтах. Так что, очевидно, другие сыграли на горло от браузеров, которые не показывают курсор ожидания, когда это необходимо, и правда, чтобы сказать - я вспомнил, что видел это и подумал, насколько сложно было бы воспроизвести. Теперь я знаю - это совсем не сложно.

Веселиться!

В вашей основной функции добавьте следующее:

$('html, body').css("cursor", "wait");  

Затем объявите эту функцию (которая является результатом AJAX):

function returnedValues () {    
  if (xmlhttp.readyState==4) 
  {      
     $('html, body').css("cursor", "auto");   
  }  
} 

И будет работать удивительно :)

Мне не нравится решение, которое просто добавляет свойство CSS в тег тела: оно не сработает, если у вас уже будет назначен курсор вашему элементу.

Посмотрите на мое решение здесь:https://stackoverflow.com/a/26183551/1895428

  $('html, body').css("cursor", "wait");  

Используйте этот код перед вызовом Ajax

Затем:

  $('html, body').css("cursor", "default");   

В функции успеха

Пример:

  $('html, body').css("cursor", "wait"); 
               $.ajax({
                       url://your url  ,
                       type: //your type post or get 
                       dataType: "html",
                       data: //data send by ajax
                       success: function(returnData){
                       $('html, body').css("cursor", "default");
                                   //any other actions ....
                                   },
                                   error: function(e){
                                     alert(e);
                                   }
                                });      

$ ('html, body'). css ("cursor", "ждать"); работает отлично

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top