2012-08-22 4 views
30

Wie kann ich den link_to Helper verwenden, um einen Link ohne ein href Attribut zu erstellen? Ich möchte einen Link ausschließlich für eine Javascript-Aktion erstellen, ich möchte nicht, dass die Seite oder irgendetwas neu geladen wird.Rails: Verwenden von link_to, um einen Link ohne href zu erstellen

Wenn ich den URL-Parameter weglasse, wird durch Klicken auf den Link die Seite neu geladen. Dito für die Bereitstellung nil anstelle der URL.

+2

haben Sie versucht, die URL auf "#"? –

+0

Doing "#" lädt die Seite neu. Ich weiß, ich kann die Link-Aktion mit JS überschreiben, aber scheint es sollte eine noch einfachere Lösung mit "link_to" – bevanb

+2

was HTML für Sie generieren? Am Ende des Tages sollte Ihr JS das normale Link-Klick-Verhalten sowieso verhindern. Dies kann ein Nicht-Problem sein. –

Antwort

27

Ich benutze diesen Ansatz:

= link_to('Click me', 'javascript:;', :id => :foo) 

Sein im Grunde ein Javascript no-op

+2

Das funktioniert. Am Ende haben wir einfach ein 'a'-Tag ohne href erstellt - so werden die Browser die' javascript:; 'Link-Zielvorschau in der unteren linken Ecke nicht anzeigen. – bevanb

+2

Was ist der Unterschied zu 'javascript: void (0)'? – freemanoid

9

die href Set:

javascript:void(0) 

So können Sie einen Link haben, dass durch Klicken es nichts tut, laden nicht die Seite, und die Seite nicht nach oben bewegen.

34

Sie können auch eine

content_tag("a","link text") 

verwenden, die Sie

<a>link text</a> 

See gibt: rails api

+1

Clever scheint jedoch, dass Links ohne ein href-Attribut nicht bewirken, dass der Cursor zu einem Zeiger wird (er bleibt als Textcursor). –

+1

könnten Sie kein "a" -Tag verwenden? Es interferiert nicht mit Javascript. – dax

+1

das funktioniert ein Leckerbissen (ich benutze Rails 4) – Dudo

0

Eine Alternative ist

= link_to("My hyperlink", "#") 

Dies Ihnen, dass Sie einen Link geben, wenn darauf geklickt, lädt die Seite nicht wie in Null übergeben. Gleichzeitig wird die Maus auf einen Mauszeiger gesetzt, den Sie mit der content_tag-Methode nicht erhalten.

+1

Dies ist an einigen Stellen in Ordnung, aber es wird den Bildschirm an den Anfang Ihrer Seite hüpfen. Hinzufügen des 'javascript :;' wie oben vorgeschlagen wahrscheinlich der bessere Weg in den meisten Fällen zu gehen. – jacklin

+1

Interessant, danke für den Tipp. –

0

Ein Beispiel für Schienen 5 wäre:

<a class="navbar-brand"><img src="/logo.png" alt="Logo"></a>

Dies ist ähnlich niels 'Antwort, aber mit einer verschachtelten image_tag und einer Klasse:

<%= content_tag("a", image_tag("/logo.png"), class: "navbar-brand") %>

Dies als machen würde .

Quelle: Rails API

0

ich lieber mit einfachem HTML ohne href Attribut überhaupt in solchen Fällen:

<a data-toggle="modal" data-target="#myModal">Open dialog</a> 

IMHO ist es besser lesbar als content_tag("a","link text").

  • Der Nachteil href=# ist, dass der Browser nach oben wenn standardmäßig
  • javascript:; sieht hässlich
0

Ich glaube, du bist besser dran mit einem Knopf in Situationen, in denen geklickt scrollt ist nicht href.

<button class='button'>Hello</button> 
0
<%= link_to '+ Add Make', 'javascript:void(0)', id: 'add-make', onclick: 'addMake()' %> 

und dann jQuery:

function addMake() { 
    $.ajax({ 
    url: '/dealers', 
    type: 'GET', 
    dataType: 'script', 
    success: function (data) { 
     console.log('it was successful') 
     $('.add-make').hide(); 
    }, 
    error: function (data) { 
     console.log('it was error') 
    } 
    }); 
} 
Verwandte Themen