0

我的 html 中有这样的内容:

<input type="text" data-validators="length(5,25);notNull();links(1);" />

函数:length、notNull 和 links 在我的 Validation 类中。我正在使用 jQuery 获取这些功能

  $(this).find('[data-validation]').each ->
    validatorsString = $(this).attr "data-validation"
    validatorsArray = validatorsString.split ";"
    validatorsObject = new Validation($(this).val())
    for v in validatorsArray
      if typeof validatorsObject[v] == "function"
        validatorsObject[v]

当我不使用参数(arg1,arg2)但现在我想使用参数时,这很好用。如何检查类中是否存在这些函数并使用参数执行(没有限制,可以是1、5、10个参数)

4

1 回答 1

3

由于您不能以字符串形式动态调用函数(除非您使用eval),因此实现所需功能的最佳方法必须解析您的data-validation信息:

给定这个字符串: validatorsString="length(5,25);notNull();links(1);",您可以使用正则表达式将其解析为函数名称和参数:

validatorsString.replace(/([\w_$]+)\(([\w_$,]+)\)/g, (all, fn, args) ->
  args = args.split ',' if args
  if typeof validatorsObject[fn] is 'function'
    validatorsObject[fn].apply validatorsObject, args
)
于 2013-05-26T15:57:43.473 回答