Disons que j'ai ceci:
<div data-uid="aaa" data-name="bbb", data-value="ccc" onclick="fun(this.data.uid, this.data-name, this.data-value)">
Et ça:
function fun(one, two, three) {
//some code
}
Cela ne fonctionne pas, mais je ne sais absolument pas pourquoi. quelqu'un pourrait-il poster un exemple de travail s'il vous plaît?
Le moyen le plus simple d'obtenir les attributs data-*
consiste à utiliser element.getAttribute()
:
onclick="fun(this.getAttribute('data-uid'), this.getAttribute('data-name'), this.getAttribute('data-value'));"
DEMO:http://jsfiddle.net/pm6cH/
Bien que je suggère de simplement passer de this
à fun()
, et d’obtenir les 3 attributs inside la fonction fun
:
onclick="fun(this);"
Et alors:
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/
La nouvelle façon d'y accéder par propriété est d'utiliser dataset
, mais elle n'est pas prise en charge par tous les navigateurs. Vous les obtiendriez comme suit:
this.dataset.uid
// and
this.dataset.name
// and
this.dataset.value
DEMO:http://jsfiddle.net/pm6cH/2/
Notez également que dans votre code HTML, il ne devrait pas y avoir de virgule ici:
data-name="bbb",
Références:
element.getAttribute()
: https://developer.mozilla.org/en-US/docs/DOM/element.getAttribute.dataset
: https://developer.mozilla.org/en-US/docs/DOM/element.dataset.dataset
: http://caniuse.com/datasetSi vous utilisez jQuery, vous pouvez facilement récupérer les attributs de données en
$(this).data("id") or $(event.target).data("id")
La réponse courte est que la syntaxe est this.dataset.whatever
.
Votre code devrait ressembler à ceci:
<div data-uid="aaa" data-name="bbb" data-value="ccc"
onclick="fun(this.dataset.uid, this.dataset.name, this.dataset.value)">
Autre remarque importante: Javascript supprimera toujours les traits d'union et rendra les attributs de données camelCase, quelle que soit la capitalisation utilisée. data-camelCase
deviendra this.dataset.camelcase
et data-Camel-case
deviendra this.dataset.camelCase
.
jQuery (après v1.5 et versions ultérieures) always utilise des minuscules, quelle que soit votre capitalisation.
Par conséquent, lorsque vous référencez vos attributs de données à l'aide de cette méthode, souvenez-vous de camelCase:
<div data-this-is-wild="yes, it's true"
onclick="fun(this.dataset.thisIsWild)">
De plus, vous n'avez pas besoin d'utiliser des virgules pour séparer les attributs.
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');
}
mais j'utilise jQuery.