2013-07-19 20 views
7

Rozważmy linię takich jak ten:Korzystanie html „teleinformatyczny” atrybut

<div id='abc' onclick='DoSomething(this.id)'></div> 

Teraz załóżmy, że jest to rozszerzona być czymś więcej tak:

<div id='abc' data-something='whatever' onclick='DoSomething(this.id)'></div> 

Nie ma żadnej różnicy funkcjonalnej tu jeszcze , ale to jest moje pytanie. Szukam sposobu przekazania wartości "danych-coś" do funkcji DoSomething zamiast id. Nie mogę znaleźć sposobu na zrobienie tego? Czy to możliwe?

Coś jak poniżej byłoby miło, ale oczywiście nie tak to działa. (Jestem w tym tylko to, aby pomóc zilustrować zamierzony cel.

<div id='abc' data-something='whatever' onclick='DoSomething(this.data-something)'></div> 
+2

I wielokrotnie kopiowałeś i wklejałeś ten sam błąd. Brakujące '' ' – epascarello

+0

Przeczytaj to: http://ejohn.org/blog/html-5-data-attributes/ – epascarello

+0

Jako kombinację odpowiedzi, możesz utworzyć funkcję korzystającą z' dataset' i powrócić to getAttribute': http://jsfiddle.net/C3rnr/ – Ian

Odpowiedz

5

Powinieneś być w stanie zrobić this.getAttribute("data-something"), tak:

<div id='abc' data-something='whatever' onclick='DoSomething(this.getAttribute("data-something"))></div> 

lub użyć this.dataset.something.

Here is my source

+0

To rozwiązanie będzie działać idealnie w naszej aplikacji. Dzięki wielkie! Na marginesie nie możemy użyć tego id dla naszego celu, ponieważ integrujemy kod pochodzący z dwóch różnych źródeł z niektórymi (obecnie niedokończonymi) własnymi narzędziami automatyzacji. Identyfikatory są nieprzewidywalne i niekontrolowane z naszej strony, więc musimy polegać na tych dodatkowych atrybutach danych (które są przewidywalne i nam znane), aby osiągnąć nasz cel. Dzięki jeszcze raz. –

10

Można zrobić

DoSomething(this.dataset.something) 

Ale to zazwyczaj zaleca się, aby oddzielić część JavaScript i HTML, co jest szczególnie łatwe kiedy twój element ma ID:.

<div id='abc' data-something='whatever'></div> 
<script> 
    document.getElementById('abc').onclick = function(){ 
     DoSomething(this.dataset.something) 
    } 
</script> 

na Internet Explorer, support for dataset is incomplete na IE10-, trzeba użyć

DoSomething(this.getAttribute('data-something')) 
+0

Nie wiedziałem o tym! Niesamowite!!! –

+0

Tylko upewnij się, że jest dostępny w przeglądarkach, które musisz obsługiwać [czy mogę korzystać z zestawu danych] (http://caniuse.com/dataset) – dc5

1

Należy użyć getAttribute metody:

<div id='abc' data-something='whatever' onclick='DoSomething(this.getAttribute("data-something")'></div> 

Ale bardzo sugerujemy aviod inline JavaScript delegacja do elementów. Powinieneś lepiej użyć DOM lub jQuery do tego i pamiętać, że jQuery ma metodę łatwiejszego obsługi atrybutów danych- *.

0

jeśli chcesz rozważyć jQuery można przekształcić kod w latków tak:

html

<div id="abc" data-something="whatever">click here</div> 

jQuery

jQuery(document).ready(function($) { 
    $('#abc').on('click', function() { 
     DoSomething($(this).attr('data-something')); 
    }); 
}); 

lub lepiej

jQuery(document).ready(function($) { 
    $('#abc').on('click', function() { 
     DoSomething($(this)); 
    }); 
}); 

function DoSomething(obj){ 
    alert(obj.attr('id')); 
    alert(obj.attr('data-something')); 
} 
Powiązane problemy