Wywołuję funkcję w samym elemencie za pomocą atrybutu onclick, ponieważ potrzebuję php, aby dynamicznie podać wartość w jednym z parametrów funkcji. Kiedy próbuję odwołać się do elementu wywołującego w funkcji przez "$ (this)", kończy się odniesieniem do całego okna, a nie do elementu. Jak to naprawić?Jquery: Wybierz element, który wywołał funkcję
Odpowiedz
Wątpię, czy rzeczywiście musisz użyć wbudowanego atrybutu onclick
. Możesz przechowywać dane w elemencie na wiele różnych sposobów. Trudno powiedzieć dokładnie, jak byś to zrobił, nie wiedząc, jaki parametr musisz przekazać, ale podam kilka przykładów.
Najbardziej elastyczny będzie prawdopodobnie w data-
atrybut:
<a href="#" id="subject" data-type="fiction">Text</a>
Następnie można uzyskać dostęp do informacji w następujący sposób:
$(document).ready(function(){
$('#subject').click(function(){
$type = $(this).data('type'); // this works as of jQuery 1.4.3, otherwise $(this).attr('data-type');
// do your handling here, using $type
});
});
Można to zrobić także za pomocą klas, tagi skryptu które tworzą globalne zmienne, wszystkie rodzaje metod. Te prawie na pewno będą lepsze niż umieszczanie uchwytów jQuery w atrybutach onclick
.
Spróbuj wysłać elementu jako parametr do funkcji tak:
<input type="text" onclick="myfunction(this);"></input>
czynność powinna być:
<script>
function myfunction(currentElement){
// ...
}
</script>
Rozwiązaniem jest, aby zapisać wartość dynamiczną w atrybutu niestandardowego nie obsługuje onclick. Specyfikacja HTML definiuje dowolny atrybut zaczynający się od "data-" jako dane niestandardowe używane dokładnie dla takich rzeczy, i jest zgodny ze specyfikacją, więc zostanie sprawdzony. Więc można zrobić coś takiego (z użyciem PHP na przykład dostosować odpowiednio):
<input type="text" id="some-input" data-some-dynamic="<?php echo $something; ?>">
następnie pobrać w javascript tak:
$(document).ready(function() {
$('#some-input').click(function() {
// $(this) -- is the input element
// $(this).attr('some-dynamic-attribute') -- contains the dynamic data you need
});
});
Myślę, że ta metoda jest lepsza niż przy użyciu ładowarki atrybutów jak onclick = "", proste, ponieważ jest bardziej solidne z punktu widzenia projektu; rozdzielenie obaw i tak dalej.
Dzięki za dobrze przemyślaną odpowiedź. Chociaż niekoniecznie to, czego potrzebowałem, to bardzo interesująca metoda. –
Allen - ta odpowiedź jest taka sama jak ta, którą dostałeś od lonesomeday wraz z alternatywą. –
Ta odpowiedź miała początkowo dwie możliwości, ale ponieważ HTML5 jest teraz obsługiwany przez wszystkie nowoczesne przeglądarki, zaktualizowałem odpowiedź, aby zawierała tylko rozwiązanie "data-X". –
- 1. Uzyskaj identyfikator elementu, który wywołał funkcję
- 2. jquery wybierz element xpath
- 3. Jak uzyskać element DOM, który wywołał zmianę Ng?
- 4. jQuery, wybierz element wewnątrz iframe, który jest wewnątrz iframe
- 5. jQuery wybierz pierwszy element, który ma pewną klasę po tym
- 6. JQuery autouzupełnianie - Wybierz pierwszy element
- 7. JQuery wybierz element wewnątrz td
- 8. Get kliknięciu obiektu, który wywołał jquery blur() zdarzenie
- 9. Wybierz poprzedni element, używając tylko selektora jQuery.
- 10. Powershell - Znajdź użytkownika, który wywołał skrypt
- 11. Jak zdobyć składnik, który wywołał JPopupMenu?
- 12. Jak uzyskać element, który wywołał zdarzenie za pośrednictwem modułu obsługi zdarzeń szkieletu
- 13. Wybierz pierwszy element zakresu, który nie jest pusty
- 14. jQuery wybierz element przez wiele klas css
- 15. Wybierz element na podstawie tekstu
- 16. viewDidAppear wywołał na viewcontroller, który jest zwalniany w iOS8
- 17. Podjęcie zmiennej składowej Vue ze strony nadrzędnej, który wywołał to
- 18. Wybierz pierwszy element kilku zestawów.
- 19. bootstrap-wybierz element dodany i wybierz go
- 20. Autouzupełnianie jQuery: Zdarzenie-wybierz
- 21. Wybierz konkretny element przed inny element
- 22. Wybierz element z określonymi danymi za pomocą jQuery
- 23. jQuery wybierz element potomny według klasy o nieznanej ścieżce
- 24. jQuery aktywuj funkcję mouseover tylko wtedy, gdy mysz trzyma element
- 25. Jquery wybierz wszystkie elementy z innerHTML, który zaczyna się ciągiem?
- 26. Znajdź element, który zamknął modalne
- 27. jQuery - Wypełnij wybierz z json'a
- 28. Jak wybrać element, który nie jest "tym"?
- 29. Sprawdź, który element został kliknięty za pomocą jQuery
- 30. Losowo wybierz element z listy
To jest dobre pytanie i chociaż dostarczone odpowiedzi sugerują pewne obejścia, żadne z nich nie odpowiada na pierwotne pytanie. Chciałbym również poznać odpowiedź. Dlaczego dostaje okno zamiast $ (this) zamiast klikniętego elementu? –