Нужно после выполнения ajax загрузить js файл (существующий), но чтобы первый больше не работал

227
27 мая 2017, 18:14

У меня есть js файл для обработки моего input (там код раскрывания списка и т.д.) и я ajax методом добавляются еще елементы input, но на них уже не работает этот js файл, а если я просто добавлю $.getScript("js/input_ajax_js.js"); , то скрипт выполняется 2 раза . Надеюсь понятно объяснил.

Answer 1

Вам не нужно загружать другой файл js для добавления событий к динамически добавленным элементам DOM модели.

Есть много способов в jqeury добавления обработчика события.

Первый пример который не будет добавлять события к динамически добавленным элементам:

$(document).ready(function() {
    ...
     $('simple element').click(function() {
        //Какое-то действие
    });
   ...
});

Наверное вы сделали так.

А вот пример добавления обработчика что будет работать со всеми элементами:

$(document).ready(function() {
    ...
    $(document).on('click', 'simple element', function(e){
        //Какое-то действие
    });
   ...
});
Answer 2

У меня есть обработчик всех элементов input (мой собственный input который можно отредактировать вручную и с выплывающим списком), вот как выглядит input:

  <div class="body_list"> 
     <input type="text" name="value_course">
     <div class="array">&#9660;</div> 
  </div> 
  <div id="list_rasp"></div> 

а вот обработчик всех input:

$("div.body_list").each(function(){

тут я беру имя таблицы (из атрибута name) и по нему понимаю какие данные заполнять в список (в )

};

Ну вот мне и нужно чтобы после динамического добавления нового input у меня и он обрабатывался

Answer 3
//тело input (каждый input находится в теге div.bodu_list и рядом тег div#list_rasp в котором будет список)
<div class="body_list"> 
     <input type="text" name="value_course">
     <div class="array">&#9660;</div> 
</div> 
<div id="list_rasp"></div>   
$("div.body_list").each(function(){ //перебор всех элементов с input
  if($(this).next().html()==""){    //проверка списка на пустоту
    var teg = [];                                                                                                                        
    var name_table = ($(this).find("input").attr("name").substr(6));//убирает из name "value_"
    $.each(eval(name_table), function(i){ //перебор массива (имя массива взято из name в input)
        var val = eval(name_table)[i];
        teg[i] = "<div id='"+val+"' class='list_rasp'>"+val+"</div>" //создание списка          
    });
    $(this).next().html(teg); //заполняем div#list_rasp тегами в который данные из массива
    reset(); // функция очистки input при клике на него
    checking(); // функция выбора элемента списка при клике на него
  };        
}); 

Сам массив я беру из php методом ajax, выглядит так (напишу один):

var course = $.parseJSON(data.json_course);
READ ALSO
Поиск минимума и максимума в массиве.JavaScript [требует правки]

Поиск минимума и максимума в массиве.JavaScript [требует правки]

ЗдравствуйтеЕсть такое задание, никак не могу найти решение

265
Как завести участок кода jQuery (if \ else)?

Как завести участок кода jQuery (if \ else)?

ЗдравствуйтеЕсть такой участок кода:

267