2013-05-15 9 views
30

Powiedzmy mam to:html "teleinformatyczny" jako atrybut javascript parametru

<div data-uid="aaa" data-name="bbb", data-value="ccc" onclick="fun(this.data.uid, this.data-name, this.data-value)"> 

I tak:

function fun(one, two, three) { 
    //some code 
} 

No to nie działa, ale mam absolutnie żadnego pojęcia dlaczego. Czy ktoś mógłby opublikować działający przykład, proszę?

Odpowiedz

55

Najłatwiej dostać data-* atrybutów jest z element.getAttribute():

onclick="fun(this.getAttribute('data-uid'), this.getAttribute('data-name'), this.getAttribute('data-value'));" 

DEMO:http://jsfiddle.net/pm6cH/


Chociaż chciałbym zaproponować tylko przejazdem this do fun() i otrzymujesz 3 atrybuty wewnątrz z funkcją fun:

onclick="fun(this);" 

A potem:

function fun(obj) { 
    var one = obj.getAttribute('data-uid'), 
     two = obj.getAttribute('data-name'), 
     three = obj.getAttribute('data-value'); 
} 

DEMO:http://jsfiddle.net/pm6cH/1/


Nowy sposób dostępu do ich własności jest z dataset, ale który nie jest obsługiwany przez wszystkie przeglądarki . Można by je jak następuje:

this.dataset.uid 
// and 
this.dataset.name 
// and 
this.dataset.value 

DEMO:http://jsfiddle.net/pm6cH/2/


Należy również pamiętać, że w HTML, nie powinien być przecinek tutaj:

data-name="bbb", 

Referencje:

+1

@lan Przekazywanie "tego" jest o wiele lepsze. Dziękuję Ci. – Werner

+0

@ user2206656 Uzgodniono :) Dodałem (bardzo proste) dema dla każdego ze scenariuszy, więc mam nadzieję, że to też pomoże! – Ian

+0

Hej, to może trochę się spóźnić, ale czy jest jakiś sposób uruchomienia tej funkcji bez "onclick", ale raczej coś w rodzaju "onload"? –

1

HTML:

<div data-uid="aaa" data-name="bbb", data-value="ccc" onclick="fun(this)"> 

JavaScript:

function fun(obj) { 
    var uid= $(obj).attr('data-uid'); 
    var name= $(obj).attr('data-name'); 
    var value= $(obj).attr('data-value'); 
} 

ale używam jQuery.

+7

Wymieniona kategoria to wyraźnie JavaScript. – harishannam

+1

+ istnieje metoda '.data()' w jquery. –