2

html-linkがあり、タグにイベントリスナーを追加したい<a>ので、javascript関数が呼び出され、その後ブラウザーがリンクを開きます。使ってみましたdocument.getElementById('link').addEventListener("click", myfunc);が、無秩序に動作し、myfuncが呼び出されることもあり、そのリンクを開いた後、リンクが開かれることもあるので、myfuncは呼び出されません。これらのイベントの順序を設定するにはどうすればよいですか?

コードパス:

HTML:

<a href="<%= Url.Action("LogOut", "Account") %>" id="logoutlink">LogOut</a>

Javascript:

function LogOutWithoutReload(e) {
VK.Auth.logout(function () { });}

document.getElementById('logoutlink').addEventListener("click", LogOutWithoutReload);

4

4 に答える 4

3

あなたの機能は何をしていますか?それはある種の非同期イベントですか?その場合、非同期タスクの成功コールバックでデフォルトのアクションを実行する必要があります。

この例は、jQuery.load関数です。

関数mufuncがjQueryload関数を呼び出すと、すぐに返され、データ自体が読み込まれるのを待ちません。あなたがしなければならないことはload、データのロードが終了したときのコールバックとして関数の2番目のパラメーターを使用することです。これは、リンクのデフォルトのアクションを実行する場所です。

これは、他の非同期タスクで発生している問題である可能性があります。

コードを編集すると、次の行が表示されます

VK.Auth.logout(function () { });

これは、ログアウト関数が確かにある種の非同期呼び出しであり、コールバック関数を持っているように見えます。私は間違っている可能性があり、ドキュメントを確認する必要がある何か他のことをしている可能性がありますが、私にとっては、そのコールバック関数で行う必要があること(リダイレクトなど)を行う必要があります。

于 2012-07-16T12:25:48.570 に答える
0

イベントハンドラーは、ブラウザーが移動する前に常に呼び出されます。私の推測では、関数が機能しないことがあり、例外が発生し、デフォルトのアクションが停止しません。デバッグしてみましたか?(エラー)コンソールにいくつかのメッセージがあるはずです。

于 2012-07-16T12:26:56.577 に答える
0

スクリプトの実行後にリンクのhref属性を設定します。

リンク

<a href='#'>LogOut</a>

コード

document.getElementById("link").onclick = function(event) {
   //your script here, if there is an ajax request,
   // change location in your callback function
   location.href = '<%= Url.Action("LogOut", "Account") %>'
}
于 2012-07-16T12:38:22.957 に答える
-2

リンクが開かないようにするには、次のことを試してください。

 document.getElementById("link").onclick = function(event) {
    event.preventDefault();
    myFunc();
 }
于 2012-07-16T12:27:10.610 に答える