jQuery - отримання спеціального атрибута із вибраного параметра


224

З огляду на наступне:

<select id="location">
    <option value="a" myTag="123">My option</option>
    <option value="b" myTag="456">My other option</option>
</select>

<input type="hidden" id="setMyTag" />

<script>
    $(function() {
        $("#location").change(function(){
            var element = $(this);
            var myTag = element.attr("myTag");

            $('#setMyTag').val(myTag);
        });
    });
</script>

Це не працює ...
Що мені потрібно зробити, щоб отримати значення прихованого поля оновленим до значення myTag при зміні вибору. Я припускаю, що мені потрібно зробити щось щодо отримання вибраного на даний момент значення ...?

Відповіді:


518

Ви додаєте обробник події до <select>елемента.
Тому $(this)буде саме спадне меню, а не вибране <option>.

Вам потрібно знайти вибране <option>, наприклад:

var option = $('option:selected', this).attr('mytag');

7
Полегшив мій всеніший час хрускоту ... +1!
eduncan911

3
Зауважте, якщо ви хочете отримати параметр, вибраний під час завантаження сторінки (не вибраний на даний момент варіант), ви можете використовувати $ ('параметр [вибрано]', це) замість цього (зауважте: якщо параметр не вибрано, коли сторінка завантажена, що не поверне жодних збігів, тож виклик attr () на цьому призведе до невизначеності. Легкий для тестування і, звичайно, для вирішення.)
Джон Клоске,

50

Спробуйте це:

$(function() { 
    $("#location").change(function(){ 
        var element = $(this).find('option:selected'); 
        var myTag = element.attr("myTag"); 

        $('#setMyTag').val(myTag); 
    }); 
}); 

26

Це тому, що елементом є "Вибрати", а не "Варіант", у якому є власний тег.

Спробуйте це: $("#location option:selected").attr("myTag").

Сподіваюсь, це допомагає.


Коротка і проста відповідь. : thumbsup:
Vicky Thakor

9

Спробуйте це:

$("#location").change(function(){
            var element = $("option:selected", this);
            var myTag = element.attr("myTag");

            $('#setMyTag').val(myTag);
        });

У функції зворотного дзвінка для change(), thisпосилається на select, а не на обраний варіант.


8

Припустимо, у вас багато варіантів. Це можна зробити:

$('.selectClass').change(function(){
    var optionSelected = $(this).find('option:selected').attr('optionAtribute');
    alert(optionSelected);//this will show the value of the atribute of that option.
});


4

Простіший синтаксис, якщо одна форма.

var option = $('option:selected').attr('mytag')

... якщо більше однієї форми.

var option = $('select#myform option:selected').attr('mytag')


1

Ось весь скрипт із викликом AJAX для націлювання на один список у межах сторінки з кількома списками. Жоден з інших вищезазначених матеріалів не працював для мене, поки я не застосував атрибут "id", навіть хоча ім'я атрибута - "ItemKey". За допомогою налагоджувача

Налагодження Chrome

Мені вдалося побачити, що вибраний параметр має атрибути: з картою JQuery "id" та значенням.

<html>
<head>
<script type="text/JavaScript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<select id="List1"></select>
<select id="List2">
<option id="40000">List item #1</option>
<option id="27888">List item #2</option>
</select>

<div></div>
</body>
<script type="text/JavaScript">
//get a reference to the select element
$select = $('#List1');

//request the JSON data and parse into the select element
$.ajax({
url: 'list.json',
dataType:'JSON',
success:function(data){

//clear the current content of the select
$select.html('');

//iterate over the data and append a select option
$.each(data.List, function(key, val){
$select.append('<option id="' + val.ItemKey + '">' + val.ItemText + '</option>');
})
},

error:function(){

//if there is an error append a 'none available' option
$select.html('<option id="-1">none available</option>');
}
});

$( "#List1" ).change(function () {
var optionSelected = $('#List1 option:selected').attr('id');
$( "div" ).text( optionSelected );
});
</script>
</html>

Ось файл JSON для створення ...

{  
"List":[  
{  
"Sort":1,
"parentID":0,
"ItemKey":100,
"ItemText":"ListItem-#1"
},
{  
"Sort":2,
"parentID":0,
"ItemKey":200,
"ItemText":"ListItem-#2"
},
{  
"Sort":3,
"parentID":0,
"ItemKey":300,
"ItemText":"ListItem-#3"
},
{  
"Sort":4,
"parentID":0,
"ItemKey":400,
"ItemText":"ListItem-#4"
}
]
}

Сподіваюся, це допомагає, дякую всім вище за те, що мене завели так далеко.




0

Ви також можете спробувати цей варіант data-myTag

<select id="location">
    <option value="a" data-myTag="123">My option</option>
    <option value="b" data-myTag="456">My other option</option>
</select>

<input type="hidden" id="setMyTag" />

<script>
    $(function() {
        $("#location").change(function(){
           var myTag = $('option:selected', this).data("myTag");

           $('#setMyTag').val(myTag);
        });
    });
</script>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.