2013-05-15 11 views
30

Diciamo che ho questo:html "data-" attributo come javascript parametro

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

E questo:

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

Beh questo non funziona, ma non ho assolutamente idea del perché. qualcuno potrebbe pubblicare un esempio di lavoro per favore?

risposta

55

Il modo più semplice per ottenere data-* attributi è con element.getAttribute():

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

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


Anche se vorrei suggerire solo di passaggio this a fun(), e ottenere il 3 attributi all'interno la funzione fun:

onclick="fun(this);" 

E poi:

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/


Il nuovo modo di accedervi dalla proprietà è con dataset, ma che non è supportato da tutti i browser . Si otterrebbe loro come il seguente:

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

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


Si noti inoltre che nel codice HTML, non ci dovrebbe essere una virgola qui:

data-name="bbb", 

Riferimenti:

+1

@lan Passare "questo" è molto meglio. Grazie. – Werner

+0

@ user2206656 D'accordo :) Ho aggiunto (molto semplice) demo per ciascuno degli scenari, quindi spero che sia d'aiuto! – Ian

+0

Ehi, potrebbe essere un po 'in ritardo, ma c'è un modo per attivare la funzione senza "onclick", ma piuttosto qualcosa come "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'); 
} 

ma sto usando jQuery.

+7

La categoria menzionata è chiaramente Javascript. – harishannam

+1

+ c'è il metodo '.data()' in jquery. –

Problemi correlati