2013-11-26 3 views
0

, пожалуйста, расскажите мне, как я могу остановить загрузку страницы onclick, если страница уже загружена?Загрузите страницу при нажатии, если она не загружена до

$(".Tab_heading:first-child").live('click',function(){ 
$.ajax({ 
      type: 'get', 
      url: "relatedInfo.action", 
      data: $(".relatedinfo_wrapper"), 
      success: relatedInfodesktop 
     }); 

$(".Tab_heading").removeClass("tabselected"); 
$(this).addClass("tabselected"); 
$(".RelService_wrapper").show(); 
$(".DepService_wrapper").hide(); 

}); 

Tab_heading выступает в виде вкладок (есть два класса вкладка ссылки = «Tab_heading») , если пользователь нажимает на заголовке страницы загружаются , но снова, если пользователь нажимает на заголовок и, если страница уже загружен, он не должен снова загружаться (GET http: xxxxxxx/relatedInfo.action --- я не должен это делать) , пожалуйста, предоставьте решение

+0

Если вы не используете старую (до 1.7) версию jQuery, вы должны использовать ['.on()'] (http://api.jquery.com/on/) вместо устаревшего [ '.live()'] (http://api.jquery.com/live/). – ajp15243

+0

нет проблем с .live() function – Sweetz

+0

Это удобное предложение использовать самый современный API, потому что '.live()' удаляется из jQuery в пользу '.on()'. – ajp15243

ответ

-1

Попробуйте этот код, где вы можете проверить переменную перед загрузкой страницы.

var loaded = false; 

$(".Tab_heading:first-child").live('click',function(){ 
if(!loaded){ 
$.ajax({ 
     type: 'get', 
     url: "relatedInfo.action", 
     data: $(".relatedinfo_wrapper"), 
     success: relatedInfodesktop 
    }); 

$(".Tab_heading").removeClass("tabselected"); 
$(this).addClass("tabselected"); 
$(".RelService_wrapper").show(); 
$(".DepService_wrapper").hide(); 
}); 
} 
} 
function relatedInfodesktop(response){ 
//your code here 
loaded = true; 
} 
+0

не работает ........ – Sweetz

1

Возможно, вы просто добавили чек перед запуском AJAX. Например, как я вижу из вашего кода, вы удаляете и добавляете некоторые классы. Поэтому, если ваш ответ ajax уже был загружен, у вас будут разные стили на странице. Поэтому попробуйте что-то вроде этого

$(".Tab_heading:first-child").live('click',function(){ 
if ($(this).hasClass("tabselected")){ do nothing} 
else{$.ajax({you get the rest})} 
} 
+0

не работает :( – Sweetz

+0

Отличный подход к Mykola, однако вместо проверки, чтобы код не запускался снова, просто удалив событие. Таким образом, если произойдет другой щелчок, нет проверка происходит, даже не один раз. – Adam

0

Отключить событие после его загрузки; ожидание отключения события до тех пор, пока пользователь не нажмет на него, может оказаться не лучшим решением. JQuery предоставляет функцию .load(); просто выберите элемент, который будет содержать ваш загруженный ajax контент, и позвоните по телефону

$('#my_loading_element').load(function() {$(".Tab_heading:first-child").off('click')}); 

на нем. Это приведет к удалению события щелчка после загрузки элемента. Или, если элемент всегда загружается через AJAX, вы можете поместить это:

$(".Tab_heading:first-child").off('click'); 

в функции успеха, чтобы расцепить событие.

Мне кажется, что если данные начнут загружаться даже до того, как пользователь нажмет на что-то, вы, вероятно, не должны вообще делать вызов ajax и просто размещать контент там со стороны сервера; если, однако, у вас должен быть вызов ajax, и он должен запускаться при нажатии, вы также можете использовать третий вариант, когда вы отключите событие при первом щелчке, чтобы все последующие клики ничего не делали (например, когда пользователь щелкает и запускает ajax один раз, затем снова нажимает до того, как закончит, затем снова и снова ... глючный код будет помещать контент в несколько раз). Ваш код будет выглядеть примерно так:

$(".Tab_heading:first-child").live('click',function(){ 
    $(this).off('click'); 
    $.ajax({ 
    ... 
    }); 
}); 

Это, вероятно, лучший вариант в вашем случае; активируйте вызов вызова ajax один раз щелчком, но никогда больше.

EDIT

$(".Tab_heading:first-child").live('click',function(){ 
    $(this).off('click'); 
    $.ajax({ 
    ... 
     success: function() { 
      $(".Tab_heading:first-child").on('click', function() { 
       //open the tab here 
      }).click(); 
     } //no trailing comma for IE compatibility 
    }); 
}); 

Это последний вызов .click() для удобства, так что пользователю не нужно нажать на вкладку дважды, чтобы открыть его.

Последнее: если вы используете jquery не 1.7 или больше, вам следует обновить его по многим причинам. Новые версии проще в использовании, более интуитивно понятны, более эффективны, менее неуклюжи и могут иметь функции безопасности, которые необходимы для серьезных веб-разработчиков. Даже если для преобразования сайта требуется много времени, это стоит усилий.

+0

Если я сделаю это, нажав это, содержимое вкладки также не откроется. – Sweetz

+0

Возможно, это связано с тем, что у вас есть несколько событий, запускаемых при нажатии, если у вас есть только эти два события (открытие вкладки, и загрузка вкладок), которые запускаются при щелчке, вы можете поместить свой код открытия вкладки внутри кода загрузки вкладки. См. мое редактирование. – Adam

+0

только события на клике - это вкладка, открытая для загрузки контента из предоставленного действия, поэтому, если я попытаюсь _.off() _, тогда пользователь не может щелкнуть, а вкладка не будет открыта, а так как iam с помощью jquery 1.4 _.on() _ wont work :( – Sweetz