Я боролся с обеими библиотеками, чтобы работать вместе, и я почти закончил сейчас, наконец!
Сначала я попробовал обычный, предложенный способ:
escaped name attributes
, поскольку RoR
автоматически устанавливает все атрибуты имени формы следующим образом: user[name]
. Это не сработает, потому что я не знаю, почему. JavaScript просто не распознал бы атрибут "user[name]"
с квадратными скобками.
Затем я попробовал это другим способом и динамически добавил правила. Это фрагмент кода, как выглядит моя проверка:
Форма:
<form id="form" action="#">
<input type="text" name="user[username]" />
<input type="submit" />
</form>
JavaScript:
$(function() {
$("input[name='user[username]']").rules("add", {
required: true,
minlength: 3,
maxlength: 20,
messages: {
required: "U better fill dis out!",
minlength: "Hey, minimum of 3 letters!",
maxlength: "U wanna fuck wis me? I no can read dat much!"
}
})
$('#form').validate({
debug: true,
validClass: 'valid',
errorClass: 'error',
errorPlacement: function(error, element) {
// qTip call
if (!$(element).hasClass('valid')) {
if (error.html() != "") {
$(element).qtip({
content: {
text: error.html()
},
position: {
my: 'left center',
at: 'right center',
target: $(element)
},
show: {
when: false,
ready: true
},
hide: false
});
}
}
},
success: function(label, element) {
// Hide tooltips on valid elements
$(element).not('.error').qtip('hide');
},
highlight: function(element, errorClass, validClass) {
$(element).addClass(errorClass).removeClass(validClass);
},
unhighlight: function(element, errorClass, validClass) {
$(element).addClass(validClass).removeClass(errorClass);
}
});
});
Теперь представьте себе следующий сценарий:
qTip
показывает мое подтверждение, которое сообщает мне: "Требуется минимум 3 буквы".qTip
за пределы поля ввода, qTip
исчезнет.qTip
внутри поля ввода, старый qTip
снова отобразится, указав "минимум 3 буквы.". Но внутри них есть 4 буквы. Почему он все еще показывается?РЕДАКТИРОВАТЬ:
Это вывод html после Step 5
<input aria-describedby="qtip-22" data-hasqtip="22" class="valid" name="user[username]" type="text">
решаемая
Ну, теперь я чувствую себя очень глупым и, как король, в то же время.
Решение было довольно простым. Вместо того, чтобы скрывать qTip, просто удалите его, когда проверка прошла успешно.
...
success: function(label, element) {
// Destroy tooltips on valid elements
$(element).not('.error').qtip('destroy');
}
...