2015-08-29 2 views
0

Я пытаюсь добавить DIV после изменения входного файлановые элементы не замеченные JQuery .on() метод

мой HTML код

<div class="form-group product-color"> 
    <div> 
     <label>Color:</label> 
     <input type="text" placeholder="Color name"/> 
    </div> 

    <div> 
     <label>Size:</label> 
     <div class="btn-group" data-toggle="buttons"> 
      <label class="btn btn-primary"> 
      <input type="checkbox" autocomplete="off" checked> S 
      </label> 
      <label class="btn btn-primary"> 
      <input type="checkbox" autocomplete="off"> M 
      </label> 
      <label class="btn btn-primary"> 
      <input type="checkbox" autocomplete="off"> L 
      </label> 
      <label class="btn btn-primary"> 
      <input type="checkbox" autocomplete="off"> XL 
      </label> 
      <label class="btn btn-primary"> 
      <input type="checkbox" autocomplete="off"> XXL 
      </label> 
     </div> 
    </div> 

    <div> 
     <label>Color Image:</label> 
     <input type="file" class="input-lg product-img" multiple=""/> 
    </div> 
</div> 

и мой код JQuery является

$(".product-color").on('change', 'input[type=file]', function() { 
    var test = $(this).closest('.product-color').clone(); 
    $(this).closest('.product-color').after(test); 
}); 

, но проблема в том, что новые элементы не видны методом .on(), а функция .after() применяется только к первому div.

Как я могу это решить?

ответ

1

Вы должны связать это событие с document элемента вместо .product-color элемента.

$(document).on('change', '.product-color input[type=file]', function() { 
var test = $(this).closest('.product-color').clone(); 
    $(this).closest('.product-color').after(test); 
}); 

Это потому, что вы клонировать .product-color элемент. Таким образом, вновь созданные элементы не будут иметь события, связанного с ними

Вот это рабочий jsFiddle

+1

graet, он работает спасибо – IBMdig

0

В вашем HTML-элементе нет элемента, который является родителем $(".product-color"). Попробуйте вставить свой HTML после последнего $(".product-color"), используя last().

$(".product-color").on('change', 'input[type=file]', function() { 
    var test = $(this).closest('.product-color').clone(); 
    $(".product-color").last().after(test); 
}); 
2

Try регулировки test к $(this).closest('.product-color');; добавить true как параметр в .clone() для сохранения приложенного change событие при клонировании ".product-color" элементов; звоните на следующей строке

$(".product-color").on('change', 'input[type=file]', function() { 
 
    var test = $(this).closest('.product-color'); 
 
    test.after(test.clone(true)); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="form-group product-color"> 
 
    <div> 
 
     <label>Color:</label> 
 
     <input type="text" placeholder="Color name"/> 
 
    </div> 
 

 
    <div> 
 
     <label>Size:</label> 
 
     <div class="btn-group" data-toggle="buttons"> 
 
      <label class="btn btn-primary"> 
 
      <input type="checkbox" autocomplete="off" checked> S 
 
      </label> 
 
      <label class="btn btn-primary"> 
 
      <input type="checkbox" autocomplete="off"> M 
 
      </label> 
 
      <label class="btn btn-primary"> 
 
      <input type="checkbox" autocomplete="off"> L 
 
      </label> 
 
      <label class="btn btn-primary"> 
 
      <input type="checkbox" autocomplete="off"> XL 
 
      </label> 
 
      <label class="btn btn-primary"> 
 
      <input type="checkbox" autocomplete="off"> XXL 
 
      </label> 
 
     </div> 
 
    </div> 
 

 
    <div> 
 
     <label>Color Image:</label> 
 
     <input type="file" class="input-lg product-img" multiple=""/> 
 
    </div> 
 
</div>

+0

он работает также, но после изменения $ («Продукт-цвет»). На на $ (документ) .он – IBMdig

+0

@IBMdig _ "\t он также работает, но после изменения $ (". Product-color "). На $ (document) .on" _ Тот же результат должен быть возвращен путем использования '.clone (true)', см. Http: //api.jquery.com/clone/#clone-withDataAndEvents. Пробовал выбор файла во втором клонированном элементе 'input' в stacksnippets? – guest271314

Смежные вопросы