2010-02-21 11 views
7

Kann ich Post-Variablen weitergeben und laden Sie eine Seite beim Anklicken eines Hyperlinks?jQuery onclick Pass-Post-Variablen und neu laden Seite

Um klar zu sein, ich habe so etwas. <a href="test.php?name=test">Click</a>

Wenn Javascript aktiviert ist,

Ich denke, ich kann "Event.preventDefault()" als Variable GET vorbei zu unterdrücken.

Also jetzt onclick, Name sollte als Post-Variable anstelle von get übergeben werden.

Wenn Javascript deaktiviert ist, Dann sollte das obige funktionieren.

Antwort

11

Sie könnten es tun, indem Sie ein neues form Element erstellen, es auf die href zeigen und .submit() darauf aufrufen.

<a class="postlink" href="test.php?name=test">Click</a> 

<script type="text/javascript"> 
    $('.postlink').click(function() { 
     var form= document.createElement('form'); 
     form.method= 'post'; 
     form.action= this.protocol+'//'+this.hostname+this.pathname; 
     $.each(this.search.slice(1).split(/[&;]/g), function() { 
      var ix= this.indexOf('='); 
      if (ix===-1) return; 
      var input= document.createElement('input'); 
      input.type= 'hidden'; 
      input.name= decodeURIComponent(this.slice(0, ix)); 
      input.value= decodeURIComponent(this.slice(ix+1)); 
      form.appendChild(input); 
     }); 
     document.body.appendChild(form); 
     form.submit(); 
     return false; 
    }); 
</script> 

Oder Sie könnten nur eine AJAX-Anfrage statt und reload() die Seite später tun, wenn Sie es vorziehen.

Allerdings bin ich nicht sicher, warum Sie das tun möchten. Was nutzt ein Link, der normalerweise geposted wird, außer wenn es nicht ist? (Nicht nur, wenn JS deaktiviert/nicht verfügbar ist oder wenn es eine Suchmaschine ist, aber auch wenn der Benutzer mit der mittleren Maustaste auf den Link klickt oder versucht, ein Lesezeichen zu setzen oder ähnliches).

Wenn alles, was Sie wollen, etwas ist verhält sich wie eine Schaltfläche, um ein POST-Formular zu senden, besser, um eine echte Formular- und Übergabeschaltfläche zu verwenden, und verwendet dann CSS, um es wie einen Link neu zu gestalten, wenn es so aussieht, wie es aussehen soll.

+0

Danke eine Tonne. Es funktionierte. Ajax und Jquery sind sehr neu für mich. Sie schlagen also vor, wenn js aktiviert ist, tun Sie "ajax" statt "post" und wenn js deaktiviert ist, laden Sie mit "get" neu. Das klingt perfekt. Ich schätze wirklich. Wenn möglich, kannst du mir helfen, Dinge zu ajaxieren. Danke nochmal. – user277891

0

Ich habe 10 Links auf einer Seite. Wenn ein Benutzer auf diese Links klickt, muss ein Ajax-Reload stattfinden.

Um klar zu sein, ich habe so etwas.

<a href="test.php?name=one">one</a> 
<a href="test.php?name=Two">Two</a> 

Wenn Javascript aktiviert ist,

Onclick muss Ajax Last stattfinden.

Wenn Javascript deaktiviert ist, dann sollte das obige funktionieren.

Grundsätzlich verwende ich name, um einige Werte meiner Suchseite zu begrenzen.

2

Sehr guter Hinweis ....

ich zum ersten Mal versuche, die Formulardaten über einen Ajax Beitrag Anruf zu senden und die Seite anschließend neu zu laden, aber es funktioniert nicht richtig:

var biq_select_val = jQuery('#biq_search_select').val(); 
jQuery.post(window.location.href, 
     { biq_amazon_item_list_search: biq_select_val}, 
     function() {window.location.reload();} 
    ); 

Jetzt Ich verwende gerade eine:

jQuery('#biq_amazon_item_list_search_form').submit(); 

und es funktioniert gut.

+0

Manchmal ist die einfachste Lösung die beste .. Danke – David