Я использовал следующий метод для добавления события щелчка к идентификатору, я задавался вопросом, мог ли я сделать то же с классом.... У меня есть много объектов (которые создаются в для каждого цикла), и я должен смочь нажать их и затем погрузку, которая была нажата..., вот мой существующий код
$('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 работа и другой не делают?
Каждый раз, когда я должен назвать функцию обратного вызова или подобный, я должен сначала открыть функцию () и затем назвать метод в функции?
$(".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"));
}
Это подойдет вам.
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
});
Просто добавьте $ (this) в свою функцию. Вам не нужно отправлять какие-либо параметры, потому что вы все еще находитесь в контексте элемента, по которому щелкнули мышью.
function submit_click() { // notice element
alert($(this).attr('id') + ' clicked');
}
Когда вы привязываете обработчик к функции, выбранный элемент будет первым аргументом
$('.submit-button').click(submit_click);
function submit_click(element){
//element is the .submit-buttom element
alert(element+' was clicked');
alert($(element)+' was clicked');
}
This should work:
$('.submit-button').bind('click', submit_click($(this)));
function submit_click(element) { // notice element
alert($(element).attr("id") + ' clicked');
}