Jump to content
php.lv forumi

<a> preventDefault nestrādā


kristers_Z

Recommended Posts

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 by kristers_Z
Link to comment
Share on other sites

 

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".

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...