2015-07-02 4 views
10

У меня есть функция, которая вызывается в событии onclick в поле флажка.Получить идентификатор элемента через функцию

<input type='checkbox' checked='' onclick='return changeEnable();' id='someid'> 

и функция

function changeEnable() 
{ 
    var val = $(this).attr('id'); 
    alert(val); 
} 

У меня есть это, но она возвращает undefined. Является ли мой синтаксис неправильным или мне что-то не хватает?

Эти флажки динамически создаются и имеют разные идентификаторы, поэтому я хочу получить идентификатор для какой-либо задачи.

ответ

19

Обратите внимание, что this в вашей функции changeEnable будет window. Вы должны передать ссылку на элемент в качестве параметра функции:

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'> 
function changeEnable(el) { 
    var val = el.id 
    alert(val); 
} 

Или, как улучшение, использовать Javascript, чтобы прикрепить ваши события для лучшего разделения проблем:

<input type="checkbox" id="someid"> 
$(function() { 
    $('#someid').change(function() { 
     var val = this.id 
     alert(val); 
    } 
}); 

Обратите внимание, что в приведенном выше примере используется событие change, что лучше по соображениям доступности.

+0

Ничего себе. работает отлично. Спасибо за напоминание. Я выберу этот ответ после таймера :) Спасибо! – jackhammer013

+0

Без проблем, рад помочь. –

+0

Отличный ответ, рекомендуется. Для тех, кто не знаком с JS (в данном случае JQuery) и хочет использовать JS-события, для этого сценария вы, очевидно, не имеете идентификатор, поэтому вам нужно назначить класс генерируемым входам '' и использовать этот '$ ('. myInputClass')'. – MasNotsram

4

я думаю, что этот код поможет иа много

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'>` 
function changeEnable(thisobj) 
{ 
    var val = thisobj.id; 
    alert(val); 
} 
+0

Не забудьте параметр в функции «changeEnable». –

+0

Спасибо! Если бы я мог только выбрать это. – jackhammer013

+1

Пожалуйста, объясните, почему это поможет. – curiousdannii

2

использовать таким образом:

<input type='checkbox' checked='' onclick='changeEnable(this);' id='someid'> 
function changeEnable(el) 
{ 
    var val = el.id; 
    alert(val); 
} 
+0

Зачем это работает? – curiousdannii

+0

он работает, попробуйте. Я использовал только javascript. –

+0

Сравните свой ответ с Рори, который на самом деле объясняет, почему работает код. – curiousdannii

3

Кроме того, вы должны знать .call метод, который проливает контекст ввода функционировать.

<input type='checkbox' checked='' onclick='changeEnable.call(this);' id='someid'> 

function changeEnable() 
{ 
    var val = this.id; 
    alert(val); 
} 
Смежные вопросы