JQuery - 从插件内的字符串调用方法

时间:2013-04-30 16:22:48

标签: jquery jquery-plugins polymorphism

我有一个插件:

$.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

我环顾四周,因为我在函数声明formvalidator中,所以我不能使用窗口,所以我尝试过:

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

但同样的错误。不知道如何将这个字符串数组作为方法执行。

更新:澄清

$( '形式')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();与我想要完成的任务无关,只是补充说明了如何激活插件。

1 个答案:

答案 0 :(得分:0)

window是全局对象,你在jQuery对象中声明formValidator(也称为'$'),所以你必须以这种方式调用它:

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

或可能:

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

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