2013-04-24 2 views
0

У меня возникли проблемы с возвратом соответствующих ответов. Это вроде работает как, при проверке parentAnswer запускается, разбивает имя, чтобы показать родительское имя Answer[12]. Теперь, если значение этого «да», я хочу вернуть, что это необходимо, если что-то еще не введено.Плагин проверки JQuery - Пользовательский метод возврата

Был в надежде, что есть некоторые уже встроенные средства для плагина, чтобы проверить, если он уже заполнен, вместо того, чтобы писать грязный код, чтобы сделать это.

<select class="input-small" name="Answers[12]"> 
    <option value="no">No</option> 
    <option value="yes">Yes</option> 
</select>  
<textarea class="parentAnswer" rows="5" cols="107" name="Answers[12a]"></textarea> 

Метод

jQuery.validator.addMethod("parentAnswer", function(value, element) { 
    var parentElement = element.name.replace(/(.*)\[(\d*).*\]/, "$1[$2]"); 
    var parentValue = $('select[name="'+parentElement+'"]').val(); 
    if(parentValue === 'yes'){ 
     return this.optional(element) || (parseFloat(value) > 0); 
     //^ this is the line in question 
    } else { 
     return true; 
    } 
}, jQuery.format("Could you supply more details")); 

ответ

1

Проверка вашего parseFloat(value) с лог консоли, вы увидите, что она всегда возвращает NaN если ваш textarea содержит некоторые цифры. Я не думаю, что это то, что ты хотел.

Попробуйте эту простую логику вместо:

jQuery.validator.addMethod("parentAnswer", function (value, element) { 
    var parentElement = element.name.replace(/(.*)\[(\d*).*\]/, "$1[$2]"); 
    var parentValue = $('select[name="' + parentElement + '"]').val(); 
    return !(parentValue === 'yes' && $(element).val() === ''); 
}, jQuery.format("Could you supply more details")); 

Работа DEMO: http://jsfiddle.net/6LGFy/

BTW: JQuery Validate очень любит для вас, чтобы иметь атрибут на всех полях ввода name, а также. У вашего textarea этот атрибут отсутствовал.


EDIT:

В качестве альтернативы, вы можете быть в состоянии использовать Подвариант depends вместо пользовательского метода. Это намного проще, но вам может понадобиться или не нужно настраивать селектор ниже.

$(document).ready(function() { 

    $('#myform').validate({ 
     rules: { 
      answer: { 
       required: { 
        depends: function(element) { 
         return $("select[name^='Answers'] option[value='yes']").is(":selected"); 
        } 
       } 
      } 
     }, 
     messages: { 
      answer: { 
       required: "Could you supply more details" 
      } 
     } 
    }); 

}); 

DEMO: http://jsfiddle.net/UyMZ3/

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