2009-08-28 1 views
70

いくつかのJavaScriptを実行するアンカータグを作成し、hrefがそれを取っていたところに行くことにします。 JavaScriptを実行してwindow.locationまたはtop.locationhrefに設定する関数を呼び出すと、私の仕事はできません。HTMLアンカーリンク - hrefとonclickの両方ですか?

だから、私はページ上のID「フー」を持つ要素を持っている想像してみてください。 ( - それはページをリロードする原因となるtop.locationを使用してリロードを起こさない)、これをクリックすると

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

が、私はrunMyFunctionを実行し、その後#Fooにページをジャンプしたい:私は次のようにアンカーをオーサリングしたいです。

提案?私の代わりにジャストreturn true ...

+0

'trueを返す;'ソリューションですが、location.hash =「#Foo'' 'も呼び出すことができます。ページをリロードしません。 – shuangwhywhy

答えて

110

それはここに助けることができるかどうかのjQueryを使用して幸せ?

onClickコードからの戻り値は、リンクの固有クリックしたアクションが処理されたか否かを判断するものである - falseを返すことは、それが処理されないことを意味していますが、trueを返すならば、ブラウザは後に、それを処理するために進むことになります関数が戻り、適切なアンカーに移動します。関数の実行が成功した場合、リンクが唯一の場所を変更する必要がある場合は

+0

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

+1

@maciek戻り値は 'undefined'として扱われ、これらの目的ではfalseとみなされます。 – Amber

+1

これまでは、js関数を使って新しいページを立ち上げ、href属性に "#"を入れるだけでしたが、通常はブラウザであるデフォルトのアクションを防ぐために "-1"を返します彼はページの上にジャンプする、または時々私は何も返さないだろう。最近、私はページを跳ねることを望まないなら、@Amberが...偽を返すようにアドバイスしたように、これらのページをすべて改訂しなければなりませんでした。 – Randy

7

、その後、onclick="return runMyFunction();"を行う機能であなたは、trueまたはfalseを返します。あなただけの機能を実行し、アンカータグは、その仕事をやらせたい場合

、単にreturn false文を削除してください。インラインJSは、物事の非常に最適な方法ではないよう

側の注意点として、あなたはおそらく、代わりにイベントハンドラを使用する必要があります。

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

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

あなたはyouf関数が実行されます、あなたは、リンクをたどるだろうし、あなたの関数が正常に実行された正確後のリンクに従いますこの方法です。

+0

遅延関数呼び出しの後に関数がtrueを返す場合は機能しないようですか? – DavidVdd

関連する問題