• 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

Cloud VPS
0 głosów
494 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 (607,060 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 (607,060 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 476 wizyt
+1 głos
2 odpowiedzi 432 wizyt
pytanie zadane 7 lutego 2021 w JavaScript przez Maciek06 Użytkownik (680 p.)
0 głosów
1 odpowiedź 255 wizyt

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,837 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

Kursy INF.02 i INF.03
...