1

jQueryを使用してイベント内で関数を呼び出そうとしていますが、関数が呼び出されるとclickjQueryが返さundefinedれます。これを行う正しい方法は何ですか?

$(document).ready(function() {
   $('#my_button').click(function() {
      var valid = check(something);
      if (valid) { // do something }
   });

   check = function(param) {
     .ajax {
         // ajax params
         success: function(data) { 
            if (data)
               return true;
         }
     }
   }
});

を実行すると、次のconsole.log(valid)ように返されますundefined

更新check(): ajax呼び出しであるコードを内部に追加しました。それが問題のようです。alert()内部チェックを行うだけで、すべてが機能します。では、ajax呼び出しの何が問題になっていますか?

4

4 に答える 4

3

問題は、チェックが非同期イベントであるということです。returnステートメントの代わりにコールバックを使用する必要があります。

$(document).ready(function() {
   $('#my_button').click(function() {
      check(something, function (valid) {
         if (valid) { // do something }
      });
   });

   check = function(param, callback) {
     $.ajax({
        // ajax params
        success: function(data) { 
            if (data){
               return callback(true);
            }
            else {
               return callback(false);
            }
        }
    });
});
于 2012-12-05T00:34:12.130 に答える
2

私はあなたがこれを望んでいると思います:

function check(param)
{
    //do something
    return true;
}

次に、Javascriptコードのどこからでもcheckを呼び出すことができます。

理由がない限り、関数ポインタを使用するのは好きではないので、この方法が最適だと思ったことを付け加えておきます。この場合、1つは存在しないようです。

于 2012-12-04T20:25:03.553 に答える
0

var前に追加してみてくださいcheck

var check = function(param) {
 // do something
 return true;

}

于 2012-12-04T20:24:45.590 に答える
0

それは、check私が信じているjqueryクリックイベントの上で宣言する必要があるためです。これを試して:

var check = function(param) {
 // do something
 return true;
}

$('#my_button').click(function() {
  var valid = check(something);
  if (valid) { // do something }
});
于 2012-12-04T20:25:02.197 に答える