概要
選択属性値に一致する 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