1

jQuery を使用するチュートリアルに基づいたコードに取り組んでいます$(document).ready。これは、ページが読み込まれると (またはドキュメントの準備が整うと) すぐに作業を開始します。コードは非常に標準的で (私が jQuery についてほとんど知らないことから)、ページの読み込み時に機能します。

$(document).ready(function () {
    // Do stuff here
});

しかし、コードが代わりに関数から実行されるように変更したいと思います。私の最初の考えは、関数をこれに変更するだけでよいということでした

$(function dothis() {
    // Do stuff here
});

そして dothis(); で呼び出します。しかし、それを行うと、「dothis is not defined」エラーが発生します。私もいくつかの異なる方法を試しましたが、これを理解することができませんでした。これを希望どおりに機能させるには、何をする必要がありますか?

function searchCustomers() {
    var searchvalue = document.getElementById('searchText2').value;
    var searchtype = document.getElementById('searchType2').value;

    //Just checking to make sure this part is working...
    //alert(searchtype + '  ' + searchvalue)

    // Run the "Do Stuff here"

    var showDiv = document.getElementById('divCustomerGrid');
    showDiv.style.display = 'block';
};
4

4 に答える 4

5

開封する

$(function dothis() {
    // Do stuff here
});

する必要があります

function dothis() {
    // Do stuff here
}
于 2013-06-27T16:51:57.190 に答える
0

jQuery は言語ではないことに注意してください。jQuery を使用するものはすべて単なる JavaScript であるため、他の JavaScript 関数を作成するのと同じ方法で関数を作成します。

最初の例を次のように書き直すと、少し明確になります。

function doStuff() {
    // Do stuff here
}
var doc = jQuery(document);
doc.ready(doStuff);

これは、あなたが書いたものとまったく同じ効果があります。関数を定義し、それをドキュメントのreadyイベントのイベント ハンドラーとして渡します。したがって、他の場所から呼び出したい場合はdoStuff()、他の関数と同じように実行できます。

さらに、イベントに基づいて後で呼び出そうとする場合doStuff()は、ドキュメントの準備完了イベントではなく、別のイベントにバインドできます。例えば:

$('#myBtn').click(doStuff);

これは、要素がクリックさdoStuff() れたときに呼び出されます。#myBtnこの場合、要素が実際に存在するdocument.readyことを確認できるように、その行全体がイベント内で発生する必要があります。#myBtnそれは次のようになります。

$(document).ready(function() {
    $('#myBtn').click(doStuff);
});

ただし、いくつかのコメントに基づいて、jQueryを使用する必要があったため、関数に入れようとしただけだと思います。searchCustomers()そうではないので、関数を呼び出す代わりに、jQuery コマンドを直接関数に入れることができます(複数の場所から呼び出していないと仮定します)。


そうは言っても、コードで実行できる、関連のない最適化がいくつかあります。

  1. jQueryまたは関数に関数を直接渡すことは、イベント ハンドラー$を割り当てるためのショートカットです。document.readyしたがって、元の例を次のように書くことができます。

    $(function () {
        // Do stuff here
    });
    
  2. jQuery を使用すると、searchCustomers()関数内で既に行っていることの多くを簡素化できます。私なら次のように書き直します。

    function searchCustomers() {
        var searchvalue = $('#searchText2').val();
        var searchtype = $('#searchType2').val();
    
        //Just checking to make sure this part is working...
        //alert(searchtype + '  ' + searchvalue)
    
        // Do more jQuery stuff here
    
        $('#divCustomerGrid').show();
    };
    
于 2013-06-27T17:40:00.180 に答える
0

またはそのように:

var dothis = function(){
  //...
}
于 2013-06-27T16:53:31.037 に答える