javascript - 字符串转 jQuery 函数

标签 javascript jquery

概览

我试图找到与选择属性值匹配的 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

最佳答案

JavaScript 中的函数就像任何其他变量一样通过它们的名称来引用。如果您定义 var window.foobar = function() { ... } 您应该能够通过 window.foobarwindow['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/

关于javascript - 字符串转 jQuery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612378/

相关文章:

javascript - Modal Body 内容 float 到 Modal footer 区域并占据 footer

javascript - 条件为真时打开引导模式

javascript - 等待隐藏 div 直到它加载

javascript - 禁用 Onclick 直到持续时间结束

javascript - 如何在新标签页中打开链接?使用 JavaScript 或 jQuery。没有阻止弹出窗口的浏览器警报

javascript - 最大化浏览器加载

javascript - HTML/jQuery 帮助我处理这段代码?

javascript - 无法用 JQuery 替换提交按钮

jquery - 如何将滚动条合并到q提示中?

jQuery ajax 加载不是一个函数