1

私は今少し混乱しています。このjqueryを自分のWebページに配置すると、すべてが正常に機能します。

<script>
    $.get("/Recipe/SearchResult/", function (response) {
        $("#SearchResults").html(response);
    }); 
</script>

しかし、私はこれをボタンをクリックして実行させようとしています。だから私はそれを次のような関数に入れました:

<script>    
    function Search() {
        $.get("/Recipe/SearchResult/", function (response) {
            $("#SearchResults").html(response);
        });
    };     
</script>

ファイヤーバグを使用して、関数Search {} {にブレークを入れると、ボタンをクリックすると、その行でブレークします。ただし、ステップオーバーすると、jqueryが実行されていないようです。次の行の関数の最後に移動するだけで、何も起こりません。

編集:これがボタンのある行です:

<button onclick="Search"  type="submit" class="btn btn-success"><i class="icon-search"></i> Search</button>

誰かアイデアはありますか?

ありがとう。

4

4 に答える 4

3

ボタンのタイプが送信であるため、ボタンをクリックすると、フォームがポストバックされ、ページがリロードされます。type="button" に変更してみてください

<button onclick="Search"  type="button" class="btn btn-success"><i class="icon-search"></i> Search</button>
于 2012-07-15T04:11:36.473 に答える
2

これを試して:

$('.btn-success').click(function(e){
   e.preventDefault();
   $.get("/Recipe/SearchResult/", function(response) {
      $("#SearchResults").html(response);
   });   
})
于 2012-07-15T03:57:46.690 に答える
2

デバッガーでは、行にブレークポイントを配置する必要があります$("#SearchResults").html(response);。コールバック関数は ajax リクエストが完了した後で呼び出されるため、直接ステップスルーすることはできません。ajax 呼び出しの非同期性は、単に順番にステップ実行できないことを意味します。

コールバック関数はシーケンシャルに見えますが、シーケンシャルには実行されません。関数が終了し、Search()しばらくしてからコールバックが呼び出されます。

于 2012-07-15T03:58:03.610 に答える
2

まず、インラインonclick属性:

onclick="Search"

...関数を呼び出していませんSearch。括弧を入れる必要があります:

onclick="Search()"

「firebug を使用して、関数 Search{} { にブレークを設定すると、ボタンをクリックすると、その行でブレークします。ただし、ステップオーバーすると、jquery を実行していないようです。単に次の行の関数の終わりと何も起こりません。」

この$.get()関数は非同期のAjax リクエストを作成するため、指定したコールバック関数はすぐには実行されず、後で Ajax レスポンスが発生すると jQuery によって呼び出されます。それが起こる前にSearch()、Ajax 応答が戻ってくる速度に関係なく、関数の残りの部分が完了します (ただし、この場合、関数にはそれ以上のステートメントはありません)。これは正常です。そのコールバック関数にブレーク ポイントを設定するか、console.log()ステートメントを使用してみてください。

于 2012-07-15T04:00:07.947 に答える