2012-03-14 2 views
0

У меня возникла проблема с Ajax errorPlacement для моего плагина Validation (See this Fiddle). ErrorPlacement в сочетании с позиция: абсолютная заставляет мой ответ проверки ajax появляться в неправильном месте.JQuery ErrorPlacement конфликт с позицией: Absolute

Если пользователь еще не указал какую-либо информацию, сообщения об ошибках появляются в правильной позиции (плавающие в правой части поля ввода в красном тексте). Однако, если пользователь вводит информацию, затем удаляет ее, предупреждение ajax («это поле обязательно») появляется не в том месте в поле ниже, где предполагается. Чтобы просмотреть проблему, введите все поля правильно, а затем удалите свое имя. В поле электронной почты появляется сообщение «это поле обязательно», но оно относится к полю имени.

The JS, которое контролирует проверки является:

$(document).ready(function() { 
     errorPlacement: function(error, element) { 
       error.insertAfter(element).position({ 
        my:'right top', 
        at:'right top', 
        of:element   
       }); 
        error.fadeOut(3000); 
     } 
    }); 
}); 

CSS-код, что является причиной этой проблемы является:

label.error { position:absolute;} 

Мне нужно включить этот CSS, так что я могу плавать ошибки над поля ввода. См. Fiddle, чтобы увидеть проблему. Спасибо!

+0

что такое 'мой, at, of' ?. Я никогда не видел этого в 'position()' ... – elclanrs

ответ

1

Просто пересмотреть свой CSS следующим образом:

form p { 
    position: relative; /* This ensures error label is positioned within the p tag */ 
} 
label.error { 
    top: 0; /* This ensures that it lines up with the top of the input */ 
    right:90px; 
    color: red; 
    position:absolute; 
} 

Даже испытания в IE просто чтобы быть уверенным ...

+0

Спасибо, огромное спасибо. –

1

Ник, вы пропустили точку (я ответил на ваш previous question об этом). У jQuery UI есть утилита Position. Это то, что я использовал, чтобы расположить метки там, где они вам нужны. Таким образом, единственная «ошибка» в вашем jsFiddle заключается в том, что вы не проверяли поле «jQuery UI» под ресурсами. Я сделал версию вашего jsfiddle, где я удалил право: 90px вещь и проверил ящик jQuery UI. Вот и все.

Если вы хотите изменить расположение меток относительно элемента с ошибкой в ​​нем, ознакомьтесь с параметром offset в утилите Position (см. Выше).

+0

Спасибо @Ryley. Ты прав. Я не понял включение jquery ui. –

+0

Только одна вещь неясна. Почему, если я включаю error.fadeOut(), это только fadeOut в первый раз? Я обновил скрипку, чтобы показать, что я имею в виду ... Любые идеи действительно оценены. Спасибо –

+1

errorPlacement действительно обрабатывает только «где» сообщений об ошибках, ни одна другая логика не существует. Вам может потребоваться изучить, как работает 'showErrors', посмотрите этот SO-запрос для деталей (связанный с ним jsfiddle имеет отношение к вам): http://stackoverflow.com/a/8842099/312208 – Ryley

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