2015-03-04 4 views
0

Следующее событие срабатывает только при изменении первого раскрывающегося списка с категорией продавца имени (выбран другой вариант). Мне нужно, чтобы это произошло для любого элемента select с этим именем. Я думал, что это будет поведение селектора ниже. Что я делаю не так ?jQuery выбор по атрибуту name выбирает только первый согласованный элемент

$('select[name=merchant-category]').change(function(){ 
    console.log('called'); 
}); 
+0

ли добавлены другие элементы динамически? –

+0

Он будет срабатывать для всех, которые существуют во время запуска кода. Если вы добавляете элементы после запуска, вам необходимо использовать событие делегирования – charlietfl

+1

http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements –

ответ

0

Попробуйте это:

$(document).on('change', 'select[name="merchant-category"]',function() { 
    console.log('called'); 
}); 

Используя синтаксис .on( с селектором, вы можете ок tch динамически созданных элементов.

Независимо от того, $('select[name="merchant-category"]') должен возвращать несколько элементов, а не только первый. Если это не так, дважды проверьте наличие опечаток в коде.

http://jsfiddle.net/vysft3go/

$(function() { 
 
    
 
    $(document).on('change', 'select[name="merchant-category"]', function() { 
 
    
 
     var notification = $('<p>').text($(this).attr('id') + ' changed!'); 
 
     
 
     $('#updates').append(notification); 
 
     
 
    }); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
 

 
<form> 
 
    
 
    <select name="merchant-category" id="select1"> 
 
     <option>1</option> 
 
     <option>2</option> 
 
    </select> 
 
    
 
    <select name="merchant-category" id="select2"> 
 
     <option>1</option> 
 
     <option>2</option> 
 
    </select> 
 

 
    
 
</form> 
 

 
<div id="updates"></div>

+0

попытается и сообщит вам – madhukar93

+0

спасибо, что сработало, можете ли вы сказать мне, почему (я добавлял другие элементы выбора динамически)? Я использовал предыдущий фрагмент кода внутри $ (document) .ready() .. Итак, не было ли это привязкой прослушивателя событий к элементу dom? Будет ли это работать, если бы я положил его вне $ (document) .ready()? – madhukar93

+0

'$ (document) .ready (...' просто запускает код, когда DOM готов. Однако если вы добавите новый элемент после того, как страница уже загружена, ваш селектор не поймает этот новый входящий элемент. используйте подход, который я объяснил, вы говорите «слушайте« документ »для любого элемента, который соответствует' select [name = "merchant-category"] '", даже если он добавлен позже. – DesignerGuy

-2

Использование each() для выбора нескольких элементов в Jquery.

Attempt1:

$.each('select[name=merchant-category]').change(function(){ 
     console.log('called'); 
    }); 

Attempt2:

$('select[name=merchant-category]').each(change(function(){ 
     console.log('called'); 
    }); 
+0

Это не будет делать ничего другого, jQuery уже использует 'each' внутри, чтобы добавить обработчик событий в коллекцию. Если код OP не работает, это не будет – charlietfl

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