jQuery Загрузить скрипт один раз на клик - PullRequest
3 голосов
/ 14 июля 2010

Я пытаюсь загрузить 2 скрипта в jquery только после нажатия на элемент #element.В настоящее время я пытаюсь использовать:

    jQuery("#element").click(function () {
       jQuery('#elementcontainer').load('/js/jquery.script.js');
       jQuery('#elementcontainer').load('/js/jquery.script2.js');
    });

Проблема в том, что скрипты загружаются каждый раз, когда нажимается элемент #element.Я хочу, чтобы скрипты загружались только один раз - и в настоящее время они также выглядят так:

"http://127.0.0.1/pck/Js/jquery.script.js?_=1279101767931"

Как я могу загрузить скрипты ТОЛЬКО один раз и остановить не кеш.Я использую ASP.NET MVC?

Thx

Ответы [ 2 ]

9 голосов
/ 14 июля 2010

Вы можете использовать one() следующим образом:

jQuery("#element").one('click', function () {
   jQuery('#elementcontainer').load('/js/jquery.script.js?' + (new Date().getTime()));
   jQuery('#elementcontainer').load('/js/jquery.script2.js?"' + (new Date().getTime()));
});

.one() выполняет обработчик события ровно один раз, часть Date() предназначена длякеш.Я не уверен, что вы хотите .load(), хотя, если вы намереваетесь просто получить / выполнить сценарии, тогда $.getScript() более уместно, например:

jQuery("#element").one('click', function () {
   jQuery.getScript('/js/jquery.script.js');
   jQuery.getScript('/js/jquery.script2.js');
});

$.ajax() запросов dataType = "script" (что $.getScript()) не будет кэшировано .


Если вы хотите кешировать , у вас есть два варианта, вы можете использовать $.ajaxSetup() один раз (но это влияет на все последующие $.ajax() или стенография вызовы):

$.ajaxSetup({ cache: false });

Или сделать полную $.ajax() версию вызова, которая $.getScript()это сокращение от:

jQuery("#element").one('click', function () {
   jQuery.ajax({ url: '/js/jquery.script.js', dataType: 'json', cache: true });
   jQuery.ajax({ url: '/js/jquery.script2.js', dataType: 'json', cache: true });
});
0 голосов
/ 14 июля 2010

Это поможет:

  jQuery("#element").click(function () {
       jQuery('#elementcontainer').load('/js/jquery.script.js');
       jQuery('#elementcontainer').load('/js/jquery.script2.js');
       jQuery(this).unbind('click');
    });

Обратите внимание на метод unbind(), вызываемый на $(this) (который является элементом #element).Вы можете проверить больше unbind() функциональность здесь .

...