0

2つの問題があります

リンクのマークアップ

                <a href="/Home/DisplaySpreadSheetData" id="displaySpreadSheetLink">DisplaySpreadsheetData</a>

1) document.ready の下に、リンクがデフォルトで無効になっていることを確認するための次のコード行がありますが、機能しません。

        $('#displaySpreadSheetLink').bind('click', disableLink);

リンクを無効にするコード

    var disableLink = function (e) {       
    e.preventDefault();
    return false;      
    }

2) リンクがクリックされたときに、checkFile() が true を返す場合、リンクを無効にする必要があることを確認したい

    $('#displaySpreadSheetLink').click(function (e) {
        if (checkFile()) {          
        e.preventDefault();
    }      
});

ここには 2 つの問題があります。最初の問題を修正するにはどうすればよいですか。2 番目の問題については、checkFile() が true を返しても e.preventDefault() が実行されないと思います。誰でも助けてもらえますか?

4

2 に答える 2

1

実際には2 つのクリック イベントをリンクにバインドしているため、問題が発生する可能性があります。disableLink新しい機能をバインドする前に、関数のバインドを解除する必要があります。

function disableLink(e) {
    e.preventDefault();
    // don't use return false here.
}

$(function() {
    $('#displaySpreadSheetLink').click(disableLink);
});

// later on

$('#displaySpreadSheetLink').unbind('click').click(function (e) {
    if (checkFile()) {
        e.preventDefault();
    }      
});

また、 のロジックを再確認してくださいcheckFile()checkFile() 私が仮定する名前に基づいて、これまでコードを見たことがないので、デフォルトの動作 if failsを防止したいと思います。あなたは本当にしたくないですif (!checkFile()) { ... }か?

もう 1 つのアプローチは、単一のイベントのみを処理することですが、デフォルトの動作を実行するかどうかに関して、いくつかの追加の状態情報を考慮に入れることです。

(function($) {
    var loaded = false;
    $('#displaySpreadSheetLink').click(function(e) {
        if (!loaded || checkFile()) {
            e.preventDefault();
        }
    });
    $(function() {
        loaded = true;
    });
})(jQuery);
于 2013-07-01T14:46:25.710 に答える
0

ページの読み込み後に関数でリンクを無効にする代わりに、無効なリンクの<span>ように見える CSS クラスで を使用して、HTML を最初に無効にするように変更する必要があります。

checkFile()ユーザーがリンクをクリックするたびに呼び出すのではなく、checkFile()istrueかかを変更できるコードをセクションに配置しますfalse。たとえば、ファイルがアップロードされた後に にcheckFile()なる場合trueは、コードをファイル アップロード関数に配置してリンクを有効にし、 を に置き換えて、<span>リンク<a>を無効にするコードを適切な場所に配置しcheckFile()ますfalse

単に使用preventDefault()するだけでリンクをクリックできるように見えますが、実際に何もしない場合、これはおそらく悪い UI 設計です。

于 2013-07-01T14:52:43.233 に答える