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.foobarand引用该函数window['foobar']。通过添加(),您正在执行该功能。

在您的第二个示例中,您应该能够通过以下方式引用该函数$.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 回答