Autor Zpráva
vlkodlak
Profil
zdravím,

narazil jsem na následující pro mně nejasné fungování, jQuery po načtení stránky, vše správné funguje, ale pouze jednou. Kód reaguje na kliknuti na A link s třídou "new-line", ale po vykonání již podruhé stejný A-link je nedostupný / nefunkční až po reloadu stránky

Jak, prosím, mohu reaktivovat provedeni kódu aniž bych musel dělat refresh?

   $("body").on("click", "a.new-line", function () {
         ....
      $.ajax({
      type: 'post',
     url: '?do=edititem',
     data: {
        param: {
               ....
        },
     },
     success: function (response) {
          ....
     },
     error: function (response) {
          .....
        }
      })
   });
Kajman
Profil
Dodejte živou ukázku.
vlkodlak
Profil
Kajman:

   $("body").on("click", "a.new-line", function () {
      $("div#ajax-spinner").show();
      var myid = $(this).attr('data-id');

      $.ajax({
     type: 'post',
     url: '?do=edititem',
     data: {
        param: {
           EmployeeNumber: $('#frm-absence-employee').val(),
           FirstDayDate: $('input.FirstDayDate').val(),
           LastDayDate: $('input.LastDayDate').val(),
           AbsenceType: $('#select-absence option:selected').text(),
           AbsenceRemark: $('input.AbsenceRemark').val()
        },
     },
     success: function (response) {
             $('form#frm-absence').on('submit');
     },
     error: function (response) {
        console.log(response);
     }
      })

      $("div#ajax-spinner").hide();
   });
Kajman
Profil
Tohle ale není živá ukázka. Povídání o živých ukázkách

Něco jako Živá ukázka ale aby tam bylo vidět, že to nefunguje.
vlkodlak
Profil
Kajman:

zde prosím
Živá ukázka
Kajman
Profil
Ale tam se POST pošle při každém kliknutí, ne jen poprvé.
vlkodlak
Profil
Kajman:
ano v živé ukázce to funguje dlé očekávaní - pokaždé

v realite na intranetu po kliknuti na A-link nic se nestane jako kdyby cely ten $("body").on("click", "a.new-line", function (){...} již nebyl a jediná možnost na konci zpracovaní ten kód znovu inicializovat / přidat zkusil jsem vložit tento kód
          ....
     $("body").on('click', "a.editmytab", function () {
        alert('ahoj');
     });
     $("div#ajax-spinner").hide();

... a tento alert-ahoj se provede
Kajman
Profil
No, právě proto potřebujeme živou ukázku, kde to nefunguje. Bez toho si musíte poradit sám. Věšteckou kouli nemáme.

Zkontrolujte si, jestli se nemění className, jestli konzole nepíše nějaké chyby, co by ukončily vykonávání js. Pořádně se podívejte, jestli tam je on a ne one. Jestli tam není jiný on click, který event ukončí a dál se nezpracovává. Jestli tam není off, který on zruší. Možností je spousta, bez živé ukázky to je jen na Vás nebo nějakém kolegovi, co se tam také dostane.
vlkodlak
Profil
Kajman:
ok, děkuji i tak
Keeehi
Profil
Taky ještě víš jednu věc. Pokud jsi to zkopíroval do živé ukázky (tím myslím že jsi tam nic neměnil) tak víš že tahle část kódu je správně a problém musíš hledat v jiných částech kódu. Pokud jsi něco měnil nebo mazal, zaměřil bych se primárně na tyto části, jelikož ty mohly způsobovat ten problém a tím že jsi je změnil/odstranil, tak jsi to taky vyřešil.
Jinak v kódu co je tady při úspěchu odesíláš nějaký formulář.
$('form#frm-absence').on('submit')
Předpokládám, že se neodesílá klasicky, protože to způsobuje znovunačtení té stránky a ty říkáš že po načtení to funguje. Takže tam budeš mít javascriptovou obsluhu která to odchytí a asi to posílá AJAXem, tak se koukni tam.

Ještě můžeš zkusit vyměnit
$("body").on('click', "a.ed...
za
$(document).on('click', "a.ed...
Pokud to zafunguje tak víš, že si někde přepisuješ element body.
vlkodlak
Profil
Keeehi:

vyrobil jsem jinou zivou ukazku, ktera mozna lepe vystihne kamen urazu kdy pubodni text vymenim za text -> EDIT a co neprobehne je nasledna vzmena EDIt -> SAVE

Živá ukázka
anonym_
Profil *
vlkodlak:
Nemůžeš v JS chytat element, který neexistuje. To, co hledáš, je .on.

Živá ukázka
vlkodlak
Profil
anonym:

dobry postreh, DEKUJI, pres stromy nevidim les .... s tim ON, prosim o lepsi nakopnuti

presto potrebuji vytvorit akci ktera, asi v momente zmeny ITEM na SAVE, bude registrovana do zpracovani a ten krok bude pokracovat z SAVE po dalsim kliku zmenen na EDIT
Kajman
Profil
$('.edit-line').click(function()...
Najde element, který má právě v tuto chvíli class edit-line a jemu navěsí událost. Pokud se mu změní class, nic to neovlivní, je to navěšené na ten element. Pokud žádný element v tu chvíli inicializace není s touto class, nemá se na nic navěšet a nic se nestane.


$(document).on('click', '.edit-line',function()...
Pro element document (který v prohlížeči již je a stále bude) nastaví událost, která pro své vykonání kontroluje, zda bylo kliknuto na element vyhovující filtru, tedy tady class edit-line. Tady kontrola se dělá až při kliknutí, takže jednu událost můžete navěsit na více stejných tlačítek i takových, která teprve vzniknout.

Když si přečtete manuál k on, pochopíte rozdíl. Té druhé možnosti se říká delegování. To použil anonym_ a proto mu to funguje.
vlkodlak
Profil
dekuji vsem zucastnenym

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0