2012-05-14 4 views
22

У меня есть два переключателя asp на странице, которые помещаются в updatepanel. Я написал событие click для них с jQuery следующим образом:

$(document).ready(function() { 
    $(".inputs").click(function() { 
     alert($(this).id); 
    }); 
}); 

Но он возвращает Undefined. В чем проблема?

EDIT: 

     alert(" or " + $(this).attr("id")); 
alert(this.id); 

Эти две строки возвращают null!

+1

Всегда используйте console.log(); Было бы намного проще. В вашем примере вы можете использовать: console.log (this); И он показывает все данные (id, className и т. Д.) – Min2liz

ответ

25

Другой вариант (именно так, как вы видели):

$(function() { 
    $(".inputs").click(function (e) { 
     alert(e.target.id); 
    }); 
}); 

НТН.

4

$(this) - объект jQuery, который обертывает элемент DOM this, а объекты jQuery не имеют свойств id. Вероятно, вы хотите получить только this.id, чтобы получить атрибут id элемента с щелчком.

6

Хийя демоhttp://jsfiddle.net/LYTbc/

это ссылка на элемент DOM, так что вы можете обернуть его непосредственно.

attr апи: http://api.jquery.com/attr/

Метод .attr() получает значение атрибута только для первого элемента в наборе согласованного.

есть хороший, привет!

код

$(document).ready(function() { 
    $(".inputs").click(function() { 
     alert(this.id); 

     alert(" or " + $(this).attr("id")); 

    }); 

});

1

это: является DOM Element $ (это): Jquery objct, который обернут Dom элемент, вы можете проверить этот ответ также this vs $(this)

попробуйте вот этот Attr(). Получите значение атрибута для первого элемента в наборе согласованных элементов.

$(document).ready(function() { 
    $(".inputs").click(function() { 
     alert(" or " + $(this).attr("id")); 

    }); 
}); 
87

$(this) и this не то же самое. Первый представляет объект jQuery, обернутый вокруг вашего элемента. Второй - это только ваш элемент. Свойство id существует на элементе, но не объект jQuery.Таким образом, у вас есть несколько вариантов:

  1. Доступ к собственности на элемент непосредственно:

    this.id

  2. доступ из объекта JQuery:

    $(this).attr("id")

  3. Вынуть объект из jQuery:

    $(this).get(0).id; // Or $(this)[0].id

  4. Получить id от event объекта:

    Когда события возникают, например, щелчок события, они несут важную информацию и ссылки вокруг с ними. В вашем коде выше у вас есть событие click. Этот объект события имеет ссылку на два элемента: currentTarget и target.

    Используя target, вы можете получить id элемента, который поднял событие. currentTarget просто расскажет вам, какой элемент в данный момент проходит пузырь. Это не всегда одно и то же.

    $("#button").on("click", function(e){ console.log(e.target.id) });

Из всех из них, лучшим вариантом является просто получить доступ к нему непосредственно из this себя, если вы не будете вовлечены в серию вложенных событий, то это могло бы быть лучше, чтобы использовать event объект каждого вложенного события (дайте им все уникальные имена) для ссылок на элементы в более высоких или более низких областях.

+6

Очевидно, достаточно популярный вопрос, что это был результат поиска номер один, когда я googled «$ (this) .id в jquery». И ваш ответ был прав и помог мне. Я пошел с методом .attr(), и он работал как шарм. Благодаря! – hardba11

+3

Почему это не правильный ответ? – Pier

+0

@Pier действительно это лучший ответ, но не единственный, который правильный. – yeyo

2

использование этого actiion

$(document).ready(function() { 
var a = this.id; 

alert (a); 
});