2012-01-29 10 views
5

Używam następującego kodu do ostrzeżenia id bieżącego elementu.Identyfikator alertu bieżącego elementu

<input type="text" id="desc" name="txtTitle" onclick="fun()"> 

jQuery:

function fun() { 
    var currentId = $(this).attr('id'); 
    alert(currentId); 
} 

Dlaczego alert "nieokreślone"? Próbowałem z:

var currentId =$('element').attr('id'); 
// and 
alert($(this).id); 
// and 
alert(this.id); 

ale ostrzega undefined

+1

Jeśli używałeś jQuery do dodania obsługi onclick, nie prosiłbyś o to. :) – epascarello

Odpowiedz

4

Spróbuj zmienić go na adres:

<input type="text" id="desc" name="txtTitle" onclick="fun.call(this)"> 

Better, związać swoją obsługi zdarzeń z jQuery, ponieważ używasz go w każdym razie:

$(function() { $('#desc').click(fun); }); 

Powód, dla którego twój kod nie działa, t kapelusz, który wywołujesz fun() z funkcji obsługi zdarzeń zbudowanej przez przeglądarkę dla twojego atrybutu "onclick". Po prostu wywołanie funkcji w ten sposób, nie dajesz żadnego obiektu "odbiorcy", aby to było — dla tego, co znaczy . Jeśli zadzwonisz pod numer .call(), możesz to jednak zrobić jawnie.

1

Po przekazaniu ciągu znaków do zdarzenia onclick, kod w tym ciągu będzie funkcją, która zostanie wykonana. Jeśli wywoła inną funkcję, this nie zostanie zdefiniowane.

Albo zrobić

$("#desc").click(fun) 

na dokumencie gotowy, czy trzeba pracować z wydarzeniami inline, przepustowych this jako argument zastosować metodę przedstawioną przez pointy.

9

$(this) działa tylko wewnątrz funkcji jQuery; nie odwołuje się do niczego wewnątrz fun(). Zamiast tego, spróbuj tego:

$('input#desc').click(function() { 
    alert($(this).attr('id')); 
}); 

Dzięki tej HTML:

<input type="text" id="desc" name="txtTitle"> 

To nie jest szczególnie dobra praktyka, aby mieć onClick="" atrybuty HTML, stąd funkcję $.click() podanych powyżej. Powinieneś zawsze umieszczać swój JavaScript w osobnym pliku (szczególnie gdy używasz jQuery).

1

Zmień element powiedzieć:

onclick="fun(this)" 

a funkcja do:

function fun(elem) 
{ 
    var currentId = $(elem).attr("id"); 
} 
0

To dlatego, że nazywa this w zakresie globalnym.

Bez jQuery, można zrobić tak jak poniżej:

<input type="text" id="desc" name="txtTitle" onclick="fun(this)"> 

function fun(el) { 
    alert(el.id); 
} 

z jQuery, można zrobić tak jak poniżej:

<input type="text" id="desc" name="txtTitle"> 

$(function(){ 
    $('input[type="text"]').click(function(){ 
     alert(this.id); 
    }); 
}); 
2

wystarczy użyć

alert($(this).attr('id')); 
1

można po prostu użyć alert(event.target.id); wewnątrz funkcji, która jest wywoływana przez twój element bez przekazywania argumentów funkcji.

Powiązane problemy