HTMLアンカーリンク-hrefとonclickの両方?


93

JavaScriptを実行するアンカータグを作成して、それがどこにあるかhrefに移動します。JavaScriptを実行してから、window.locationまたはtop.locationそのhref場所に設定する関数を呼び出しても機能しません。

それでは、ページに「Foo」というIDの要素があるとします。次のようなアンカーを作成します。

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a>

これをクリックすると、runMyFunctionを実行してからページにジャンプします#Foo(リロードは発生させません-使用top.locationするとページがリロードされます)。

提案?ここで役立つ場合は、jQueryを使用して満足しています...


return true;が解決策ですが、を呼び出すこともできますlocation.hash = '#Foo'。ページは再読み込みされません。
shuangwhywhy 2017年

回答:


130

ただ、return true代わりに?

onClickコードからの戻り値は、リンクの固有のクリックされたアクションが処理されるかどうかを決定するものです-戻るfalseとは処理されないことを意味しtrueますが、戻ると、関数が戻って適切な場所に移動した後にブラウザが処理を続行しますアンカー。


1
onclickが何も返さない場合はどうなりますか?
maciek

1
@maciekでは、戻り値はundefinedこれらの目的でfalseと見なされるものとして扱われます。
'05年

1
これまでは、js関数を使用して新しいページを起動し、href属性に「#」だけを入力すると、デフォルトのアクション(通常はブラウザのジャンプ)を防ぐために「-1」を返していました彼がページの一番上に、または時々私は何も返さないでしょう。最近、@ Amberがアドバイスしたように、これらのページをすべて修正する必要がありました...ページをジャンプさせたくない場合は、具体的にfalseを返します。
ランディ

1
@Amberは、onclickが何も返さない場合、リンクに固有のクリックされたアクションが処理されるようです。
iplus26

また、クリックイベントハンドラーでevent.preventDefault()を使用しないでください。
ルーベン

36
<a href="#Foo" onclick="return runMyFunction();">Do it!</a>

そして

function runMyFunction() {
  //code
  return true;
}

このようにして、関数を実行し、リンクをたどり、関数が正常に実行された直後にリンクをたどります。


1
延期された関数呼び出しの後に関数がtrueを返した場合、動作しないようです。
DavidVdd 2014

7

関数の実行が成功した場合にのみリンクが場所を変更する必要がある場合は、実行onclick="return runMyFunction();"し、関数でtrueまたはfalseを返します。

関数を実行したいだけの場合、アンカータグにその働きをさせたい場合は、return falseステートメントを削除するだけです。

副次的な注意として、インラインJSは最適な方法ではないため、おそらく代わりにイベントハンドラーを使用する必要があります。


0

クリーンなHTML構造を作成する場合は、これを使用できます。

//Jquery Code
$('a#link_1').click(function(e){
  e . preventDefault () ;
  var a = e . target ;
  window . open ( '_top' , a . getAttribute ('href') ) ;
});

//Normal Code
element = document . getElementById ( 'link_1' ) ;
element . onClick = function (e) {
  e . preventDefault () ;
  
  window . open ( '_top' , element . getAttribute ('href') ) ;
} ;
<a href="#Foo" id="link_1">Do it!</a>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.