kristers_Z Posted November 2, 2013 Report Posted November 2, 2013 (edited) Ir : tabula, kurā ir daudz linku. Mērķis : klikšķinot uz linkiem nenostrādā redirects uz href un darbojas ajaxs. Problēma : preventDefault(); nestrādā, links redirectojas uz hrefu Kods : $('a').click(function(e){ alert('click event works!'); alert(e.isDefaultPrevented); e.preventDefault(); alert(e.isDefaultPrevented); }); Pirmais alerts nostrādā, tātad click events tiek uzķerts. Otrs alerts atgriež: function returnFalse() {return false;} Trešais alerts atgriež: function returnTrue() {return true; } Pēc tam lapa tik un tā redirektojas uz hrefu. Kāpēc? Must be missing something obvious. Ja nu kas, tad Object.keys(e) atgriež šādas metodes: originalEvent,type,isDefaultPrevented,timeStamp,jQuery11020701912498800084,toElement,screenY,screenX,pageY,pageX,offsetY,offsetX,fromElement,clientY,clientX,buttons,button,which,view,target,shiftKey,relatedTarget,metaKey,eventPhase,currentTarget,ctrlKey,cancelable,bubbles,altKey,delegateTarget,handleObj,data Edited November 2, 2013 by kristers_Z Quote
codez Posted November 2, 2013 Report Posted November 2, 2013 Man strādā: http://jsfiddle.net/Q6sfQ/ ja izmanto jquery, var izmantot return false: http://jsfiddle.net/Q6sfQ/1/ Quote
kristers_Z Posted November 2, 2013 Author Report Posted November 2, 2013 Man strādā: http://jsfiddle.net/Q6sfQ/ Manā konkrētajā aplikācijas vietā tieši tāds paņēmiens nestrādā. Bet tikko atradu problēmu un piespiedu strādāt, lai gan pats nesaprotu, kāpēc tas tā ir: Pirmkārt - tiek lietots Ruby on Rails freimworks, tāpēc linkus ģenerē helper metode. ģenerētais html ir, apmēram, šāds: <a data-method="delete" href="/subjects/144" rel="nofollow">Delete subject</a> Uzmanība jāpievērš tam, ka href ir relatīvs. Ja piespiež kodu ģenerēt absolūtu hrefu, lūk, šādi: <a data-method="delete" href="localhost:3000/subjects/144" rel="nofollow">Delete subject</a> Tad preventDefault(); strādā kā paredzēts. Dīvaini, dīvaini.. Ceru, ka kāds var paskaidrot. Pieņemu, ka tas ir saistīts ar Rails veidu kā implementēt REST. Ja nemaldos, tad ar JS tiek uzķerts data-method="delete" un pārvērsts par formu, lai sūtītu caur HTTP POST ar apslēptu mainīgo method="delete". Quote
codez Posted November 2, 2013 Report Posted November 2, 2013 Nu skaties, vai tur nav kāds javascript fw, kurš tās darbibas un redirektu izpilda ar javascriptu. preventDefault noņem defaulto a darbību, bet, ja tālāk kāds cits events taisa redirectu, tad tas nepalīdzēs: http://jsfiddle.net/Q6sfQ/3/ tad tev palīdzēs tikai kombinācija no preventDefault vai return false + stopImmediatePropagation http://jsfiddle.net/Q6sfQ/4/ Quote
kristers_Z Posted November 2, 2013 Author Report Posted November 2, 2013 tad tev palīdzēs tikai kombinācija no preventDefault vai return false + stopImmediatePropagation u r the man, stopImmediatePropagation visu atrisināja. Paldies. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.