jQuery: Как я добавляю обработчик щелчков к классу и узнаю, какой элемент был нажат?

Я использовал следующий метод для добавления события щелчка к идентификатору, я задавался вопросом, мог ли я сделать то же с классом.... У меня есть много объектов (которые создаются в для каждого цикла), и я должен смочь нажать их и затем погрузку, которая была нажата..., вот мой существующий код

$('submit-button').bind('click', submit_click);


function submit_click() {
    alert('I am clicked');
}

Я задавался вопросом, существует ли некоторый способ передать в переменной в мою функцию для щелчка, таким образом, я могу проверить идентификатор?? или подобный

следовательно это

function submit_click(element) { // notice element
    alert(element + ' clicked');
}

Любая справка действительно ценится

Спасибо

Править

Я попробовал следующее, и в отладке "элемент" не определено...

$('.clear').bind('click', clear_click($(this)));

   function clear_click(elem) 
   {
        alert(elem.attr("id"));
   }

РАБОЧЕЕ РЕШЕНИЕ

У меня есть рабочее решение, но я не полностью понимаю, почему, я хотел бы знать, почему оно работает..

В первую очередь, я попробовал

 $('.clear').bind('click', clear_click($(this)) );

Это, казалось, работало, "НО" когда я загрузил страницу, она вводит "clear_click" метод, не будучи нажатым - странный...

Затем я попробовал это..

 $('.clear').bind('click', function() { clear_click($(this)) } );

Это работает отлично! Но я не понимаю, почему я должен передать функцию и затем в рамках этого вызова функции мой clear_click.

Кто-либо может объяснить, почему 1 работа и другой не делают?

Каждый раз, когда я должен назвать функцию обратного вызова или подобный, я должен сначала открыть функцию () и затем назвать метод в функции?

5
задан Benjamin 7 December 2013 в 17:33
поделиться

5 ответов

$(".yourclass").click ( function() {
    $(this).attr ( "id" ); //S(this) returns the current element
});

, и вы можете написать такой код

$('.yourclass').bind('click', function() { submit_click($(this)) });

function submit_click(elem) 
{
    alert ( elem.attr ("id" ) );
}

Изменить

   $('.clear').bind('click', function() { clear_click($(this)) });

   function clear_click(elem) 
   {
        alert(elem.attr("id"));
   }

Это подойдет вам.

10
ответ дан 18 December 2019 в 11:57
поделиться

Update

To answer your second question:

You can bind a function as a second argument when using the click event, but you cant bind a function and apply arguments. On the other hand, there is no need to send this as an argument to the clear_click function since the this keyword inside the function refers to the element itself:

So this works in your case:

$('.clear').bind('click', clear_click);

function clear_click()  {
  alert(this.id);
}

Sending this as an argument is not needed and bad coding:

$('.clear').bind('click', clear_click(this));

In the event handler, the first argument is the event object. You can extract the clicked element from that object using currentTarget or target. In jQuery, this always refers to the currentTarget in the event handler context:

var handler = function(e) {
  var id = this.id; // this == e.currentTarget
}

$('submit').click(handler); // .click(fn) is shorthand for .bind('click', fn)

More examples:

$('submit').bind('click', function(e) {

    console.log(e.target) // the target that was clicked on
    console.log(e.currentTarget) // the element that triggered the click
    console.log(this) // the same as above

});
5
ответ дан 18 December 2019 в 11:57
поделиться

Просто добавьте $ (this) в свою функцию. Вам не нужно отправлять какие-либо параметры, потому что вы все еще находитесь в контексте элемента, по которому щелкнули мышью.

function submit_click() { // notice element
            alert($(this).attr('id') + ' clicked');
        }
0
ответ дан 18 December 2019 в 11:57
поделиться

Когда вы привязываете обработчик к функции, выбранный элемент будет первым аргументом

$('.submit-button').click(submit_click);

function submit_click(element){
  //element is the .submit-buttom element
  alert(element+'  was clicked');
  alert($(element)+' was clicked');
}
0
ответ дан 18 December 2019 в 11:57
поделиться

This should work:

$('.submit-button').bind('click', submit_click($(this)));

function submit_click(element) { // notice element
   alert($(element).attr("id") + ' clicked');
}
0
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: