0

これは、ロード時に実行されるグローバル関数です。

$.fn.loadfns = function(specificfns) {
    $('#wrapper').hide();
    $('#load').fadeIn(400);
    $(window).load( function() {
        $('#load').fadeOut(400, function() {
            $('#wrapper').fadeIn(600, function() {
                specificfns;
            })
        })
    });
};

問題は、一部のページでは、ロード後に追加の関数を実行する必要があるため(glDatePickerにイベントを挿入するなど)、loadfnsのパラメーターとしてそれらを渡そうとしています。

$.fn.loadfns("alert('I won't be run');");

しかし、何も起こりません、それは実行されません。私が行った場合

... rest of function ...
$('#wrapper').fadeIn(600, function() {
    alert(specificfns);
})

「alert('I will not run');」と警告します。(角かっこなし)これは関数として機能するはずです。

4

1 に答える 1

3

関数を渡すには、文字列ではなく関数を渡します。

追加の関数を1つだけ許可する場合(もちろん、他の関数を呼び出すこともできます):

$.fn.loadfns = function(extraFunction) {
$('#wrapper').hide();
$('#load').fadeIn(400);
$(window).load( function() {
  $('#load').fadeOut(400, function() {
    $('#wrapper').fadeIn(600, function() {
        if (extraFunction) {
            extraFunction();
        }
    })
  })
});
};

このように使用されます:

$("....").loadfns(function() {
     alert("Do something");
});

複数の追加機能を許可する場合は、配列を渡します。

$.fn.loadfns = function(extraFunctions) {
$('#wrapper').hide();
$('#load').fadeIn(400);
$(window).load( function() {
  $('#load').fadeOut(400, function() {
    $('#wrapper').fadeIn(600, function() {
        var index;

        if (extraFunctions) {
            for (index = 0; index < extraFunctions.length; ++index) {
                extraFunctions[index]();
            }
        }
    })
  })
});
};

(もちろん、ES5対応の環境にいる場合、またはシムを使用している場合は、ループforEachの代わりに使用することもできます。)for

このように使用されます:

$("....").loadfns([doSomething, doSomethingElse]);

function doSomething() { /* ... */ }
function doSomethingElse() { /* ... */ }
// They don't have to be named, it's just clearer this way than with inline ones

try/catch関数からの例外を処理する場合は、関数の呼び出しの周りにブロックを配置することを検討してください。

于 2012-12-14T08:58:41.983 に答える