2016-11-07 3 views
2

私のレールアプリにはlink_toがあります。これはツールチップとして機能します。ユーザーがリンク上を移動すると、ヘルパーテキストが表示されます。Rails link_to:クリックしても、そのままで、ページの先頭にジャンプしないでください。

ユーザーが誤ってツールチップをクリックした場合:ページの上部にジャンプするデフォルトの動作は欲しくなりません。私はpreventDefaultできるjavascriptと知っているが、この同じ動作を取得する簡単なレールの方法はありますか?

私はremote: trueを考えていましたが、まだページの先頭にジャンプしています。

コード:

<%= link_to "#", title: 'my helper text', remote: true do %> 
    <i class="fa fa-question-circle"></i> 
<% end %> 

答えて

2

あなたが経験してきたように、文書の先頭にスクロールになります空のアンカーを使用します。ただし、存在しないアンカーを指定すると、スクロール位置は変更されません。例:

<a href="#doesnotexist">Stay Here</a> 

これは、文書のURLとブラウザの履歴を変更しますが、これはユーザーの利便性を低下させます。

JSを使用して処理するなど、ページを変更しないリンクの場合は、プログレッシブエンハンスメントを使用し、最も適切な方法(たとえば、return falseまたはe.preventDefault)でJSのブラウザアクションを防止する必要があります。

実際にはどこにリンクしてはいけないツールチップがある場合は、spanなどの別のインライン要素に変更することをお勧めします。

+0

あなたのアンカーターゲット*が存在すべきであると付け加えます。あなたはリンクにIDを与え、hrefのリンクと同じIDを使うことができます。 –

+0

JavaScriptの 'return false'と' preventDefault() 'をイベントに設定すると、これ以上のものを止めることができます。 –

+0

はい、はい、はい!リンクが必要な場合を除き、リンクを使用しないでください。 'span'ははるかに良い選択です。 –

-1

あなたは'javascript:;'の代わりに、URLとして'#'で渡すことができます。 またはこの答えてみてください:Rails: using link_to to make a link without href

あなたがspanのようなさまざまな要素を使用しない理由は、ユーザがその要素をクリックしたくない場合は?

+0

' 'のjavascript:;''無効であり、使うべきではありません。 –

0

私は<a>タグをonclick="return false;"と一緒に使用して終了しました。this answerで示唆したとおりです。

あなたがよりよい解決策を持っている場合は共有してください:

<a onclick="return false;" data-toggle="tooltip" data-html="true" title="<%= my_helper_text%>”><i class="fa fa-question-circle"></i></a> 
+0

あなたは 'onclick'を使用すべきではありません。それは1996年に受け入れられましたが、それは2016年の悪い練習とみなされます。 –

0

このような状況では、私は通常nilの使用に成功しました。いくつかの研究の後

<%= link_to nil, title: 'my helper text' %> 
    <i class="fa fa-question-circle"></i> 
<% end %> 

、私は少数の人々はjavascript:;が使用されるべきものですが、私はnilを使用してすべての問題を経験していないと主張見ています。

+0

「javascript:;」を使用することは絶対にありません。無効です。 –

+0

Karl、私は 'javascript:;'について何も知らないので、なぜそれが悪いのか分かりません。私はちょうど私が質問のポスターを助けるいくつかの答えを研究していた時を知っています**それらのうちの**はそのコード行を使って言及しました。 あなたは 'javascript:;'を使用するのが悪い考えであることを解説してもらえますか? – celly

+1

ここでは心配はありません。 'javascript:'は有効なプロトコルではありません( "* psudo * -protocol ")、有効なURLではありません。 *一部の*ブラウザがサポートしているかもしれませんが、有効ではありません。 RFCとHTML仕様を読んだので、それが有効でないことを保証することができます。 Microsoft *は*サポートしています。https://msdn.microsoft.com/en-us/library/aa767736(v=vs.85).aspx) Mozillaはサポートしていますが、https:///developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void –

0

には実際のリンクが必要な場合を除き、アンカー要素は使用しないでください。適切なHTML要素を使用します。この場合、span要素を使用する必要があります。

あなたがこれを行うことができるようになります。多分

<span data-toggle="tooltip" data-html="true" title="<%= my_helper_text%>”><span class="fa fa-question-circle"></span></span> 

かをも、この:

<span data-toggle="tooltip" data-html="true" title="my helper text" class="fa fa-question-circle"></span> 
関連する問題