【问题标题】:JQuery - Call method from string inside pluginJQuery - 从插件内的字符串调用方法
【发布时间】:2013-04-30 16:22:48
【问题描述】:

我有一个插件:

$.fn.formvalidator = function(method) {

我称之为:

$('form').formvalidator();

我有一个接收字符串数组的方法:

function execute(field, rules) {
    for(i=0; i<rules.length; i++) {
        window[rules[i]](field);
    }
}

rules:
array(
    'required',
    'email'
);

尝试将数组中的每个字符串作为带有字段参数的方法执行。我收到一个错误:

Unhandled Error: 'window[rules[i]]' is not a function

我环顾四周,我想因为我在一个函数声明表单验证器中,所以我无法使用窗口,所以我尝试了:

$.fn.formvalidator[rules[i]](field);
fn.formvalidator[rules[i]](field);
formvalidator[rules[i]](field);

但同样的错误。不确定如何将此字符串数组作为方法执行。

更新:澄清

$('form').formvalidator();调用迭代表单中所有输入的插件。每个输入元素都有一个属性 data-fv="required|email|other|example" 我用它来抓取:

var attributes = $(this).data('fv');

一旦我得到这些属性,我就会用“|”将它们分开进入规则数组。现在对于每个字段输入,我想调用这些字符串:

window[rules[i]](field); // if rules[0] = 'required' it calls the method below

function required(field) {
    ...
}

$('form').formvalidator();与我要完成的工作无关,只是添加以显示插件的激活方式。

【问题讨论】:

    标签: jquery jquery-plugins polymorphism


    【解决方案1】:

    window 是全局对象,您在 jQuery 对象(也称为“$”)中声明 formValidator,因此您必须以这种方式调用它:

    $("form")[rules[i]](field);
    

    或者可能:

    $("form").formValidator(rules[i], field);
    

    我无法弄清楚,因为我不知道 formValidator 实际做什么,它接受函数或字符串以及它对它们做什么?

    【讨论】:

    • 你很困惑,我的错。请稍后查看我的更新。基本上每个输入法都可以指定验证器插件读取和验证的规则。所以你可以去 然后插件会读取它并确保它的值至少为 6。
    • @user2233440 你试过没有前缀'window'的'rules[i](field)'吗?没关系,这不应该工作
    • 您的函数应该在 javascript 文件的顶层定义(因为它们不能在另一个函数中,除非您将它们声明为 window.required= function() {})
    • 我不能拥有它,因为这是一个 JQuery 插件?我需要将它们全部打包成一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多