2013-10-24 5 views
0

У меня есть <input> тег внутри <table> с пользовательским атрибутом. Когда я пытаюсь создать функцию для извлечения этого атрибута, она не работает. Любые идеи?Получение пользовательского атрибута из ввода не работает

<table> 
    <tr> 
    <td> 
     <input row="ab01" id="ab01_01"> 
    </td> 
    </tr> 
</table> 

function retrieve_row(){ 
alert($(this).attr('row')); 
} 

Результат undefined. Зачем?

+3

потому что что такое '$ (this)'? try '$ (" # ab01_01 "). attr ('row');' – rorypicko

ответ

3

Пара вещей:

Ваш this не область действия права, просто ориентировать элемент непосредственно:

function retrieve_row(){ 
    alert($('#ab01_01').attr('row')); 
} 

Кроме того, не делают пользовательские HTML атрибуты, как вы. Не бойтесь, хотя, вы можете использовать HTML5 data- атрибут для достижения той же цели:

<input row="ab01" id="ab01_01"> //INVALID 

    <input data-row="ab01" id="ab01_01"> //VALID 

    function retrieve_row(){ 
     alert($('#ab01_01').attr('data-row')); //The un-hip way 
     alert($('#ab01_01').data('row')); //Like the cool kids are doing 
    } 

С Паппи JQuery в: http://ejohn.org/blog/html-5-data-attributes/

на основе замечаний Op, я считаю, что он ищет это:

$("table").on("click", "input", function() { 
    alert($(this).data('row')); 
}); 

Возможно, вы захотите добавить класс или идентификатор к своей таблице, чтобы эта функция не была слишком широкой.

+1

Я думаю, вы имеете в виду атрибут, а не элемент? – yochannah

+1

+1 Несмотря на использование атрибутов данных, вы должны использовать [.data()] (http://api.jquery.com/data/) вместо .attr() – CodingIntrigue

+0

Вы оба правы по обоим пунктам. Извините, раннее утро и взяли кровь :) –

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