Изменение указателя мыши при вызове ajax
Я хочу изменить указатель мыши на символ "Wait" при запуске вызова 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";
}
}
может ли кто-нибудь помочь, как изменить выше, чтобы решить проблему soo, что он shud работать в Firefox и IE тоже.
9 ответов
посмотрите на метод 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, который пытается изменить курсор на just $(this).addClass('busy');
затем, когда вы хотите измените курсор назад, просто вызовите $(this).removeClass('busy');
простое и простое решение, просто добавьте следующий код на каждую страницу, которую вы хотите затронуть:
$(document).ajaxStart(function(){
$("body").addClass('ajaxLoading');
});
$(document).ajaxStop(function(){
$("body").removeClass('ajaxLoading');
});
и CSS:
.ajaxLoading {
cursor: progress !important;
}
конечно, вы можете изменить это в соответствии с вашими потребностями, но для простого эффективного способа отображения курсора загрузки при каждом вызове ajax это путь (или, по крайней мере, способ, которым я бы это сделал).
в вашей основной функции добавьте следующее:
$('html, body').css("cursor", "wait");
затем объявите эту функцию (которая является результатом ajax):
function returnedValues () {
if (xmlhttp.readyState==4)
{
$('html, body').css("cursor", "auto");
}
}
и будет работать удивительно:)
Мне не нравится решение, которое просто добавляет свойство css в тег body: оно не будет работать, если у вас уже есть курсор, назначенный вашему элементу.
посмотрите на мое решение здесь: https://stackoverflow.com/a/26183551/1895428
ни один из ответов здесь, на переполнение стека, будет работать для меня. Я использую последний и самый большой FireFox для разработки, а другие здесь используют IE, Chrome и т. д.... Каждый раз, когда я делал вызов AJAX jQuery, ничего не происходило, и только когда вызов AJAX возвращался - курсор менялся. Тогда он застрянет в курсоре ожидания. Итак-звонок сделан, сервер вернул новую информацию, информация была отображена и тут бац! Подождите, курсор отображается и не будет идти прочь. Я перепробовал все ответы. Этот.назывались вещи 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
затем:
$('html, body').css("cursor", "default");
в функции success
пример:
$('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);
}
});