• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jeden przykład - selektor/metoda JavaScript działa, jQuery (częściowo) nie działa

VPS Starter Arubacloud
0 głosów
419 wizyt
pytanie zadane 3 września 2015 w JavaScript przez jeol Nowicjusz (150 p.)
edycja 3 września 2015 przez jeol
for(var j = 1; j <= 6; j++)
{
 var el = document.getElementById("p" + x + j); //x to zmienna typu int
 var p = "#p" + x + j;
 if (el.innerHTML == '<img src="img/e.png">')
 {
 $(p).html('<img src="img/' + clr + '.png">'); //clr to zmienna typu str
 $(p).css("cursor", "default");

 $(p).click(function() {return false;});
 $(p).dragstart(function() {return false;});

 //el.onclick = function() {return false;}
 //el.ondragstart = function() {return false;}	

 return;
 }
}

Cześć.
Chcę zmienić właściwości pewnego obiektu (takiego, który zawiera odpowiedni kod HTML - w przeciwnym wypadku element jest pomijany, a pętla przechodzi do następnego): jego kod HTML, wygląd kursora, funkcje wywołane przy kliknięciu i próbie przeciągnięcia. Udało mi się uzyskać ten efekt przy użyciu selektora document.getElementByID, jednak stosując jQuery i selektor $("#id") tylko dwie właściwości zostają zmienione - kursor i zawartość HTML. Powyżej istotny fragment kodu.

Jeżeli zamiast linii

$(p).click(function() {return false;});
$(p).dragstart(function() {return false;});

Użyję

el.onclick = function() {return false;}
el.ondragstart = function() {return false;}	

Wszystko jest w porządku.

W przypadku stosowania selektorów jQuery wszystko działa tak, jakby nie było tych dwóch linii kodu - nie zostaje zmieniona funkcja wywołana po kliknięciu oraz przy próbie przeciągania. Zawartość HTML i styl kursora po najechaniu na element zostają zmienione.

Wiem, że $(p) wybiera obiekt jQuery, który zawiera obiekt DOM normalnie wybierany przez document.getElementByID, ale używam metod jQuery - w takim razie dlaczego dwie linie kodu nie działają?

Ciekawi mnie ta sprawa i będę wdzięczny za pomoc.

PS. Musiałem przesunąć początek posta pod kod, ponieważ gdy jest na początku to zostaje do tego kodu dołączony - ktoś wie, jak się tego pozbyć? Usunięcie formatowania nie pomaga.

1 odpowiedź

+1 głos
odpowiedź 3 września 2015 przez Comandeer Guru (599,730 p.)
wybrane 3 września 2015 przez jeol
 
Najlepsza

Poczytaj o $.on, bo tylko tak można przypiąć dragstart w jQuery

komentarz 3 września 2015 przez jeol Nowicjusz (150 p.)
edycja 3 września 2015 przez jeol

Dzięki za odpowiedź, faktycznie - rozwiązało to problem z dragstart.
Próbowałem też

$(p).on("click", function() {return false;});

Ale to nie pomogło, funkcja wywoływana przy kliknięciu na obiekt nie zmienia się.

komentarz 3 września 2015 przez Comandeer Guru (599,730 p.)

Bo elem.onclick nadpisuje klik na element, a $.on dodaje kolejną metodę do obsługi kliku.

komentarz 3 września 2015 przez jeol Nowicjusz (150 p.)
edycja 3 września 2015 przez jeol
Wielkie dzięki za pomoc, teraz już wszystko jasne. Gdyby ktoś się zastanawiał jak wyczyścić te metody, można użyć metody $.unbind() lub $.off(), jednak nie mogą być one przypisane do zdarzenia przy pomocy document.getElementById("id").onclick().

Podobne pytania

0 głosów
2 odpowiedzi 203 wizyt
+1 głos
2 odpowiedzi 244 wizyt
pytanie zadane 7 lutego 2021 w JavaScript przez Maciek06 Użytkownik (680 p.)
0 głosów
1 odpowiedź 200 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...