3

概要

選択属性値に一致する jQuery 関数を見つけて、その関数を選択で実行しようとしています。

例。

$('[data-store="' + key + '"]').each(function() {
var $callback = $(this).attr('data-filter');
if($callback != null) {
    var fn = window['$.fn.nl2br()'];
    if(jQuery.isFunction(fn)) {
        $(this).fn();
    }
}
$(this).setValue(value);
});

問題1

文字列から jQuery 関数呼び出しを作成する方法がわかりません。

$(this)'onclick'; のように関数を呼び出すことができることはわかっています。ただし、呼び出す前に存在するかどうかを確認する方法がありません。

通常、私はこれを行うことができます: var strfun = 'onclick'; var fn = body[strfun];

if(typeof fn === 'function') {
    fn();
}

これは失敗するようです:

var fn = window['$.fn.nl2br()'];
if(jQuery.isFunction(fn)) {
    $(this).fn();
}

編集:

私はこれを行うことに成功しているようです:

if($callback != null) {
    var fn = $(this)[$callback]();
    if( typeof fn === 'function') {
        $(this)[$callback]();
    }
}

問題 2

jQuery.isFunction() を使用して、メソッドが存在するかどうかをどのように確認しますか? jQuery.isFunction()でこれを行うことができますか?

関数を宣言します。

$.fn.nl2br = function() {
    return this.each(function() {
        $(this).val().replace(/(<br>)|(<br \/>)|(<p>)|(<\/p>)/g, "\r\n");
    });
};

関数が存在するかどうかをテストします。これらのオプションは失敗します。

jQuery.isFunction($.fn.nl2br); // = false
jQuery.isFunction($.fn['nl2br']()); //false
4

2 に答える 2

4

JavaScript の関数は、他の変数と同じように名前で参照されます。定義すると、 とvar window.foobar = function() { ... }を介して関数を参照できるはずです。を追加することで、関数を実行しています。window.foobarwindow['foobar']()

2 番目の例では、次の方法で関数を参照できるはずです$.fn['nl2br']

$.fn.nl2br = function() {
    return this.each(function() {
        $(this).val().replace(/(<br>)|(<br \/>)|(<p>)|(<\/p>)/g, "\r\n");
    });
};

console.log(jQuery.isFunction($.fn['nl2br']));

実際の例を参照してください - http://jsfiddle.net/jaredhoyt/hXkZK/1/

于 2012-05-16T05:19:05.040 に答える
1
var fn = window['$.fn.nl2br']();

jQuery.isFunction($.fn['nl2br']);
于 2012-05-16T05:18:56.247 に答える