Подтвердить что ты не робот

Перезагрузите файл javascript после запроса AJAX

После запроса новые созданные элементы не распознаются обработчиками событий в моем коде jQuery.

Есть ли способ перезагрузить файл, чтобы перерегистрировать эти события?

4b9b3361

Ответ 1

Я предполагаю, что вы имеете в виду, что события, которые вы зарегистрировали для элементов, которые были заменены результатами ваших запросов ajax, не срабатывают?

Используйте .live() (см. http://api.jquery.com/live/), чтобы зарегистрировать события против элементов, которые соответствуют селектору (включая новые элементы DOM, созданные из результатов ajax), а не результаты селектора, когда обработчики событий были первыми, которые будут уничтожены при их замене.

например. заменить

$('div.someClass').click(function(e){
    //do stuff
});

с

$('div.someClass').live('click', function(e){
    //do stuff
});

Важно:

Хотя я рекомендовал использовать .live(), это для ясности, так как его синтаксис похож на .bind(), вы должны использовать .on(), если это возможно. См. Ссылки в комментарии @jbabey для получения важной информации.

Ответ 2

Этот вопрос касался привязки события привязки к элементу DOM, созданному после загрузки страницы. Например, если после запроса ajax вы создаете новый блок <div> и хотите поймать событие onClick.

//This will work for element that are present at the page loading
$('div.someClass').click(function(e){
    //do stuff
});

// This will work for dynamically created element but is deprecated since jquery 1.7
$('div.someClass').live('click', function(e){
    //do stuff
});

// This will work for dynamically created element
$('body').on('click', 'div.someClass', function(e){
    //do stuff
});

Здесь вы найдете документацию: http://api.jquery.com/on/

Ответ 3

Эти коды отлично подходят для меня.

$("head script").each(function(){
            var oldScript = this.getAttribute("src");
            $(this).remove();
            var newScript;
            newScript = document.createElement('script');
            newScript.type = 'text/javascript';
            newScript.src = oldScript;
            document.getElementsByTagName("head")[0].appendChild(newScript);
        });

Он удаляет старый тег script и создает новый с тем же src (перезагружая его).

Ответ 4

Чтобы повысить производительность сайта и уменьшить общий размер файла, вы можете загрузить файл JavaSript (.js), когда это необходимо. В jQuery вы можете использовать функцию $.getScript для загрузки файла JavaScript во время выполнения или по требованию.

Например,

$("#load").click(function(){
    $.getScript('helloworld.js', function() {
        $("#content").html('Javascript is loaded successful!');
    });
});

когда нажата кнопка с идентификатором "load", она будет загружать файл JavaScript "helloworld.js" динамически.

Попробуйте сами В этом примере, когда вы нажали на кнопку загрузки, он будет загружать "js-example/helloworld.js" во время выполнения, содержащее функцию "sayhello()".

<html>
<head>

<script type="text/javascript" src="jquery-1.4.2.min.js"></script>

</head>
<body>
  <h1>Load Javascript dynamically with jQuery</h1>

<div id="content"></div>
<br/>

<button id="load">Load JavaScript</button>
<button id="sayHello">Say Hello</button>

<script type="text/javascript">

$("#load").click(function(){
  $.getScript('js-example/helloworld.js', function() {
     $("#content").html('
          Javascript is loaded successful! sayHello() function is loaded!
     ');
  });
});

$("#sayHello").click(function(){
  sayHello();
});

</script>
</body>
</html>

Ответ 5

Что вы имеете в виду не распознанные jQuery?

jQuery посещает DOM каждый раз, когда вы делаете запрос, поэтому они должны быть видимыми. Однако приложенные события НЕ будут.

Что не видно точно?

P.S.: Перезагрузка JavaScript возможна, но очень обескуражена!

Ответ 6

В обратном вызове запроса вызовите функцию, действующую на ваши недавно добавленные или созданные блоки.

$.ajax({
   success: function(data) {
        $('body').append(data);
        //do your javascript here to act on new blocks
   }
});

Ответ 7

простой способ решить эту проблему

$(document).ready(function(){

$('body').on('click','.someClass',function(){

//do your javascript here..

});
}); 

Ответ 8

  var scripts = document.getElementsByTagName("script");
  for (var i=0;i<scripts.length;i++) {
    if (scripts[i].src)
      if(scripts[i].src.indexOf('nameofyourfile')  > -1 )
        var yourfile = scripts[i].src;
  }
  jQuery.get(yourfile, function(data){
  if(data){
     try {
      eval(data);
     } catch (e) {
     alert(e.message);
    }
 }
    });

Ответ 9

Вы можете попробовать плагин loadcript для загрузки файла javascript.

forexample 
$("#load").click(function(){
    $.loadScript('path/example.js');
});

or 
$.ajax({
   success: function(data) {
        $.loadScript('path/example.js');
   }
});