2014-10-28 3 views
0

Я хочу манипулировать позиционированием позиционирования метки плагина jQuery Validate при представлении.jQuery Пользовательская проверка метки

Когда вы просматриваете форму, нажмите кнопку «Отправить», и вы заметите, что метки, которые у меня заменяются плагином проверки. Это нормально, но я не хочу удваивать метки.

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

Вот мои текущие правила проверки:

validation: function() { 
     $('form').validate({ 
      rules: { 
       "email": { 
        required: true, 
        email: true 
       }, 
        "name": { 
        required: true 
       } 
      } 
     }); 
    } 

Вот рабочий пример того, что у меня есть: JSFIDDLE

+0

Плагин jQuery Validate создает и переводит свои собственные метки ошибок. При этом, по формулировке вашего вопроса, мне сложно определить, есть ли что-то не так с работой вашего jsFiddle или если вы просто хотите удалить любую потенциальную избыточность в своем коде. Итак, какая часть, если таковая имеется, вашего jsFiddle не работает должным образом? – Sparky

ответ

1

Я просто отрегулировать ваш Fiddle добавления CSS

fieldset label:nth-of-type(even) 
{ 
display:none; 
} 

Когда вы нажимаете кнопку «Отправить», вторая метка не отображается.

Update на вопрос в комментарии: Я сделал еще одну настройку CSS для этого, Fiddle:

fieldset label[style*='display: none'] + label 
{ 
    display:block; 
    color:#007c92; 
    top:15px; 
    position:absolute; 
    left:23px; 
    font-size:0.7em; 
    font-weight:bold; 
} 

я не уверен, если это то, что вы хотели бы иметь - имя, а также поскольку по электронной почте теперь отображается метка поверх правильных записей. Это можно скорректировать, если это нужно сделать только для электронной почты.
Без этих настроек CSS похоже, что плагин validate только изначально отображал метку на входе, отображал сообщение об ошибке на этикетке в случае ошибки и устанавливал метку на display:none в случае правильных записей. Возможно, есть опция/параметр в плагине проверки, чтобы иметь эту функциональность, не используя этот способ обхода, но, возможно, вы уже проверили это.

+0

Я боялся, что это могло быть решением. Спасибо за кучи за это. У вас есть работа над лейблом электронной почты? Когда вы вводите правильный адрес электронной почты, ярлык исчезает для ввода? – Filth

+0

@ Filth Glad, если бы я был в состоянии помочь вам, и просто обновил свой ответ на второй вопрос. –

1

Не на 100% уверен, что если это то, что вы ищете, однако вам не нужно скрывать исходные метки при отображении ярлыков jQuery Validate. Можно просто заменить текст вашей этикетки по умолчанию с текстом сообщения об ошибке в одной строке в функции обратного вызова errorPlacement ...

errorPlacement: function (error, element) { 
    $(element).next('label').text(error.text()); 
} 

Доказательство концепции: http://jsfiddle.net/z2gpjf03/


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

http://jsfiddle.net/89y26/178/

+0

Эй, спасибо большое за это - ваш ответ вызвал немного исследований, и я исправил свое решение. Вот решение! http://jsfiddle.net/89y26/236/ – Filth

+0

@ Filth, я рад помочь. Однако, глядя на вашу демонстрацию, я могу сказать, что вы абсолютно не должны делать что-либо с классами из функции 'errorPlacement'. Он предназначен только для размещения ошибки в макете. – Sparky

0

Правильные ребята Я сделал это! Была миссия, но так рада, что это работает: http://jsfiddle.net/89y26/236/

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

Игнорируйте стиль иконок, но не стесняйтесь использовать этих парней и манипулировать, как вам нравится!

validation: function() { 
     $('form').validate({ 
      rules: { 
       "name": { 
        required: true 
       }, 
       "email": { 
        required: true, 
        email: true 
       } 
      }, 
      //Add Error Class To Fieldset if field invalid 
      highlight: function(element) { 
       $(element).parent().removeClass('form--valid').addClass('form--error'); 
       $(element).next('.input-label').hide(); 
      }, 
      //Add Valid Class To Fieldset if field valid 
      unhighlight: function(element) { 
       $(element).parent().removeClass('form--error').addClass('form--valid'); 
       $(element).next('.error').hide(); 
       $(element).parent('fieldset').find('.input-label').show(); 
      }, 
      errorPlacement: function(error, element){ 
       error.addClass('input-label--error').insertBefore(element); 
       //Add Error class to fieldset 
       element.parent('fieldset').addClass('form--error'); 
      } 
     }); 
    } 
+0

Я не могу одобрить это решение в его нынешнем виде. Кроме того, пожалуйста, поместите соответствующий код в ответ, чтобы сделать его независимым от jsFiddle. Благодарю. – Sparky

+0

Вы абсолютно не должны ** делать что-либо со стилями или классами из функции 'errorPlacement'. Он предназначен только для размещения ошибки в макете – Sparky

+0

Я понимаю Sparky, но я предполагаю, что требования - это требования, и я не нашел другого подходящего решения. Я отредактирую свой ответ с помощью соответствующего кода. – Filth

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