Ответ 1
Вы добавляете обработчик события в элемент <select>
.
Поэтому $(this)
будет самой выпадающей, а не выбранной <option>
.
Вам нужно найти выбранный <option>
, например:
var option = $('option:selected', this).attr('mytag');
Учитывая следующее:
<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 при изменении выбора. Я предполагаю, что мне нужно что-то сделать для получения выбранного значения...?
Вы добавляете обработчик события в элемент <select>
.
Поэтому $(this)
будет самой выпадающей, а не выбранной <option>
.
Вам нужно найти выбранный <option>
, например:
var option = $('option:selected', this).attr('mytag');
Попробуйте следующее:
$(function() {
$("#location").change(function(){
var element = $(this).find('option:selected');
var myTag = element.attr("myTag");
$('#setMyTag').val(myTag);
});
});
Это потому, что элемент является "Select", а не "Option", в котором у вас есть собственный тег.
Попробуйте следующее: $("#location option:selected").attr("myTag")
.
Надеюсь, что это поможет.
Попробуйте следующее:
$("#location").change(function(){
var element = $("option:selected", this);
var myTag = element.attr("myTag");
$('#setMyTag').val(myTag);
});
В функции обратного вызова для change()
, this
относится к выбору, а не к выбранному параметру.
Предположим, у вас много выбора. Это может сделать это:
$('.selectClass').change(function(){
var optionSelected = $(this).find('option:selected').attr('optionAtribute');
alert(optionSelected);//this will show the value of the atribute of that option.
});
Вы довольно близко:
var myTag = $(':selected', element).attr("myTag");
Упрощенный синтаксис, если одна форма.
var option = $('option:selected').attr('mytag')
... если несколько форм.
var option = $('select#myform option:selected').attr('mytag')
Вот весь script с вызовом AJAX для таргетинга на один список на странице с несколькими списками. Ни один из других вещей выше не работал у меня, пока я не использовал атрибут "id", хотя мое имя атрибута "ItemKey". Используя отладчик
Мне удалось увидеть, что выбранная опция имеет атрибуты: с картой 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"
}
]
}
Надеюсь, что это поможет, спасибо вам всем за то, что вы зашли так далеко.
Попробуйте этот пример:
$("#location").change(function(){
var tag = $("option[value="+$(this).val()+"]", this).attr('mytag');
$('#setMyTag').val(tag);
});
$("body").on('change', '#location', function(e) {
var option = $('option:selected', this).attr('myTag');
});