2013-09-12 2 views
3

Я пытаюсь получить значения data из options в форме ниже, поэтому я могу использовать их в jQuery, но я как-то не кажется успешным. То, что я пытаюсь сделать, просто, и вы увидите в моем коде ниже. Как я могу сделать что-то подобное?Получить атрибуты данных jquery из значений опции выбора формы

$('#selectForm').click(function(e) { 
     e.preventDefault(); 

     var action = $(this).data('id'); 
     var type = $(this).data('name'); 

     console.log(action+' '+type); 
    }); 

// Jquery

<form id="selecttest"> 
    <label for="fruit">Please select at least two fruits</label><br> 
     <select id="fruit" name="fruit" size="5"> 
      <option data-id="1" data-name="norman">Banana</option> 
      <option data-id="2" data-name="james">Apple</option> 
      <option data-id="3" data-name="lars">Peach</option> 
      <option data-id="4" data-name="john">Turtle</option> 
     </select> 
     <input type="submit" id="selectForm" value="Validate Selecttests"> 
    </form> 

ответ

15

здесь демо - http://jsfiddle.net/tnVfV/

здесь код:

$('#selectForm').click(function (e) { 
    e.preventDefault(); 

    var action = $('#fruit option:selected').attr('data-id'); 
    var type = $('#fruit option:selected').attr('data-name'); 

    console.log(action + ' ' + type); 
}); 

data-id и data-name являются атрибуты вариантов. Есть родные атрибуты id и name вы могли бы использовать ...


нормально, как на tymeJV комментарий здесь является код с помощью data():

$('#selectForm').click(function (e) { 
    e.preventDefault(); 

    var action = $('#fruit option:selected').data('id'); 
    var type = $('#fruit option:selected').data('name'); 

    console.log(action + ' ' + type); 
}); 

демо http://jsfiddle.net/tnVfV/1/

+0

Измените 'attr' на' .data ("id") ' – tymeJV

+0

@tymeJV почему это? – Elen

+0

Чтобы извлечь пользовательские атрибуты данных, вы должны использовать '.data'. Per jQuery API. Метод .data() позволяет нам привязывать данные любого типа к элементам DOM таким образом, чтобы они были безопасны от циклических ссылок и, следовательно, от утечек памяти. – tymeJV

3

Это следует сделать это:

var action = $("#fruit option:selected").attr('data-id'); 
var type = $("#fruit option:selected").attr('data-name'); 
+0

$ (this) будет ссылаться на $ ('# selectForm') в $ ('# selectForm'). Click (function() {...}); – Alex

+0

О да .. спасибо за указание. Я сделаю редактирование. – Sarcastic

+0

Не совсем ответ, так как пользователь конкретно спрашивает об использовании методов данных jquery для атрибутов данных. –

0

Вы можете получать доступ выбранного атрибута опциона data-name так:

$('#fruit option:selected').attr('data-name'); 

Так что попробуйте эту

$('#selectForm').click(function(e) { 

    // better add this part of code for cross-browser functionality: 
    var event = (window.event || e); 

    event.preventDefault(); 

    var data-name = $('#fruit option:selected').attr('data-name'); 

}); 
+0

Я знаю, что jQuery - это кросс-браузер, я не думаю, что необходима дополнительная проверка. –

+0

@SilviuBurcea да, jQuery есть. Но это обычная практика с событиями – Alex

0

Попробуйте сделать следующее в вашем код

$('#selectForm').click(function(e) { 
    e.preventDefault(); 
    var select = $("#fruit")[0].selectedIndex; 
    var id= $("#fruit option:eq("+select+")").data("id"); 
    var type=$("#fruit option:eq("+select+")").data("name"); 
    console.log(id +" "+ type)   
}); 
2

var id = $('#fruit').find(':selected').data('id'); var name = $('#fruit').find(':selected').data('name');

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