2013-06-18 2 views
1

Как с помощью jQuery получить идентификатор элемента, на который нажимается, а затем передать его как параметр в функцию? Пример кода jQuery ниже.Получите идентификатор элемента, который щелкнул и прошел как параметр?

jQuery(document).ready(function() { 
    var id = this_id; 
    jQuery(".lightbox a").click({param: id}, functionName); 
}); 

Могу ли я заметить, что параметр «param» является неотъемлемой частью структуры функции.

Извините, я не являюсь мастером Javascript любыми способами.

+0

Это не имеет никакого смысла, документ не имеет идентификатора, и 'this_id', вероятно, следует' this.id', не то, что он будет работать именно так как? – adeneo

+0

Что такое 'this_id' здесь? Ваш пример кода, похоже, не связан с вашим вопросом. –

+0

Возможный дубликат [Получение идентификатора элемента, который запускал событие с помощью jQuery] (http://stackoverflow.com/questions/48239/getting-the-id-of-the-element-that-fired-an-event -using-jquery) –

ответ

5

Я предполагаю, дело в том, чтобы передать данные о событии в функцию, которая ожидает, что, как, click() поддерживает синтаксис .click([eventData ], handler(eventObject)), и если да, то вы должны перебирать коллекцию себе:

jQuery(document).ready(function($) { 
    $(".lightbox a").each(function() { 
     $(this).click({param: this.id}, functionName); 
    }); 
}); 

EDIT:

Вы могли бы сделать это с on(), а также:

jQuery(document).ready(function($) { 
    $(".lightbox a").each(function() { 
     $(this).on('click', {param: this.id}, functionName); 
    }); 
}); 

FIDDLE

3

Вы можете использовать this.id внутри событий нажмите, например:

jQuery(".lightbox a").click(function() { 
    var id = this.id; 

    //pass to a function 
    testFunction(id); 
}); 

function testFunction(param) { 
    console.log(param); 
} 
2

Вы можете использовать this.id или $(this).attr("id");, но вы можете получить ссылку на $(this) - обернутый или нет - немедленно и работать с переменной если вы многое сделаете там.

3

Это легко только доступ к this элементу, чтобы получить щелкнул элемент, а затем извлечь его идентификатор и сохранить его в переменной, как это:

jQuery(".lightbox a").click(function(){ 
    var id = jQuery(this).attr("id"); 
    callFunction(id); 
}); 
+1

Всякий раз, когда вы пишете '$ (this) .attr ('name')' или '$ (this) .prop ('name')' обычно лучше и проще писать 'this.name'. –

+0

Спасибо, не знал этого подхода. – Skatox

+3

Хорошо, тогда я немного поразмышлю. '$ (this) .prop ('name')' читает свойство 'name' элемента DOM, на которое ссылается this. Но тогда вы можете напрямую получить доступ к свойству и избежать накладных расходов на создание объекта jQuery и вызвать метод (просто сделайте 'this.name'). Технически, '$ (this) .attr ('name')' эквивалентно 'this.getAttribute ('name')', но при работе с элементами DOM вам нужны обновленные свойства DOM вместо атрибутов HTML, поэтому снова, вы просто используете 'this.name'. –

5

В обработчик щелчка, вы можете получить доступ к элементу ID с this.id или $(this).attr('id'):

jQuery(document).ready(function() { 
    jQuery(".lightbox a").click(function(){ 
     functionName(this.id); 
    }); 
}); 
+0

Не нужно использовать анонимную функцию –

+1

@roasted, действительно, это можно сделать без анонимной функции, но для меня анонимная функция делает ее немного более гибкой. Подумайте, хотите ли вы вызвать 'functionName' из другого места, кроме обработчика события. Вам нужно будет установить контекст 'this', прежде чем вызывать его, а не просто передавать идентификатор, и если бы у вас не было элемента управления, вам также пришлось бы искать DOM. В любом приложении, которое не является полностью тривиальным, я бы не хотел, чтобы функция зависела от щелчка. – MrCode

+0

ya, nice point! –

2

вы можете использовать $(this).att("id").

$(".lightbox a").click(function() { 
    var ID=$(this).att("id"); 

    //pass to a function 
    TestFunction(ID); 
}); 

function TestFunction(P) { 
    console.log(P); 
} 

Живой пример

http://jsbin.com/enobop/1/edit

3

http://jsfiddle.net/pArW6/

jQuery(document).ready(function() { 
    jQuery(".lightbox a").click(functionName); 
}); 

function functionName() 
{ 
    alert(this.id); 
} 
+0

+1 для отображения альтернативного метода. – MrCode

2

Вы можете сделать это:

jQuery(document).ready(function() { 
    jQuery(".lightbox a").click(function (e) { 

     // Cancel the default action (navigation) of the click. 
     e.preventDefault(); 

     // 'this' here refers to the link being clicked in the current scope 
     // you can check the console for the id for debug purpose 
     console.log(this.id); 

     // pass the id to the function 
     functionName(this.id); 
    }); 
}); 
2

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

jQuery(".lightbox a").click(function(ev) { 
    console.log(ev.target.id); 
} 

Конечно, это смесь jQuery и чистого JS.

+0

не беспокойтесь, jquery в конце концов js –

2

Обычно у вас есть функция для события, объявленного с функцией (событие) , и у события есть цель, а идентификатор цели - то, что вы хотите.Так

$("SomeElement").on("click", function(e){ callanotherFunction(e.target.id) }) 

делает, что вы хотели

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