2013-03-24 4 views
-2

Я хочу передать как объект несколько вариантов для моего jQuery-плагина. Вот как я это делаю:Использование строки в качестве ссылки на объект

$("#contact-form").formValidate({ 
    contactname: { 
     "minLength": 5 
    }, 
    contactemail : { 
     "minLength": 4 
    }, 
    contactsubject : { 
     "minLength": 10 
    }, 
    contactmessage : { 
     "minLength": 25 
    } 
}); 

В моей функции я хочу сослаться на объект шпагатом, который вводится идентификатор поля формы.

$.fn.formValidate = function(options) { 
     //... 
     var $this = $(this); 
     var id = $this.attr("id"); 
     var length = options.id.minLength; 
     //... 
} 

Это решение не работает.

// редактировать

(function($, window, document, undefined) { 
    $.fn.formValidate = function(options) { 
     /* 
     * Deafults values for form validation. 
     */ 
     var defaults = { 
      minLength: 5, 
      type : "text", 
      required : true 
     }; 

     var methods = { 
      error : function(id) { 
       $(id).css("border", "1px solid red"); 
      } 
     } 
     var settings = $.extend({}, defaults, options); 
     console.log(options); 

     this.children().each(function() { 
      var $this = $(this); 
      var tagName = $this[0].nodeName; 
      var inputType = $(this).attr("type"); 
      var id = $this.attr("id"); 
      console.log(id); 
      var property = options[id].minLength; 

      if (tagName == "INPUT") { 
       console.log("property: " + property); 
       console.log("--------------------------"); 
       $(this).keyup(function() { 
        if ($this.val().length > 0) { 
         $this.css("border", "1px solid red"); 
        } else { 
         $this.css("border", "1px solid #ccc"); 
        } 
       }); 
      } 
     }); 
     return this; 
    }; 
}(jQuery)); 
+0

Когда я изменить 'опции [ID] .minLength' в' options.minLength [ID] 'это работает хорошо, но я также изменить' $ ("# контакт-форма"). FormValidate ({ \t \t CONTACTNAME: { \t \t \t MinLength: 5 \t \t}. 'к' \t $ ("# контакт-формы") formValidate ({ \t \t MinLength: { \t \t \t CONTACTNAME: 5 \t \t}, ' – cookieholic3

+0

У вас есть опции. [id] .minLength' там. – JJJ

+0

Когда я вставлял код здесь, я сделал опечатку, извините – cookieholic3

ответ

6

JavaScript objects also function as associative arrays.

Форма options.id.minlength обращается свойство, имя которого является строка "идентификатор".

Вместо этого вы хотите получить форму options[id].minlength, которая обращается к свойству, имя которого является значением переменной id.


Кроме того, id не может иметь значение, которое вы думаете, что он делает. Поскольку $this представляется ссылкой на # контактная форма, id будет иметь значение «контактная форма». Если вы хотите получить доступ к коллекции элементов внутри формы, попробуйте что-то вроде $this.find('input,textarea,select').

+0

Также не работает. Firebug throws "TypeError: options [id] undefined" – cookieholic3

+2

@ cookieholic3: Тогда это означает, что у вас нет свойства на 'options' с именем, хранящимся в переменной id. –

+0

@ cookieholic3 Вы нацеливаете идентификатор формы, а не каждый отдельный элемент. – bfavaretto

Смежные вопросы