jQuery: очистить веб-форму, когда пользователь щелкает в другом месте

У меня есть веб-страница с 3 веб-формами, где первые две ожидают цифровой ввод, а последняя может быть не пустой.

Веб-форма с тремя текстовыми полями, два из которых содержат неверные данные

Вот сокращенный и готовый к запуску тестовый пример:

<html>
<head>
<style>
.invalid {
        border: 2px solid #FF0000;
        background-color: #FFCCCC;
}
</style>
<script type="text/javascript" src="jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(function() {
        //$('body').click(....)
        $('#cl_txt, #mks_txt, #comment_txt').blur(function() {
           $('#cl_txt, #mks_txt, #comment_txt').removeClass('invalid');
        });

        $('#mks_btn').click(function(e) {
            if (! $('#mks_txt').val().match(/^[0-9]{6,}$/i)) {
                $('#mks_txt').addClass('invalid');
                e.preventDefault();
            }
        });
        $('#cl_btn').click(function(e) {
            if (! $('#cl_txt').val().match(/^[0-9]{6,}$/i)) {
                $('#cl_txt').addClass('invalid');
                e.preventDefault();
            }
        });
        $('#comment_btn').click(function(e) {
            if ($('#comment_txt').val().length < 2) {
                 $('#comment_txt').addClass('invalid');
                 e.preventDefault();
            }
        });
});
</script>
</head>
<body>
<table border=1>
<form><tr><th>MKS</th><td>
<input name="toggle_mks" id="mks_txt" type="text" size="10">
<input type="submit" id="mks_btn" value="Add MKS" class="toggle">
</td></tr>
<form><tr><th>CL</th><td>
<input name="toggle_cl" id="cl_txt" type="text" size="10">
<input type="submit" id="cl_btn" value="Add CL" class="toggle">
</td></tr></form>
<form><tr><th>Comments</th><td>
<textarea name="comment" id="comment_txt" rows="4" cols="40">
</textarea>
<input type="submit" id="comment_btn" value="Add comment" class="toggle">
</td></tr></form>
</table>
</body>
</html>

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

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

В этом случае я бы хотел, чтобы красный класс .invalid был удален из текстовых элементов #cl_txt, #mks_txt и #comment_txt. снова. Но я не знаю, как это устроить. Я пытался установить $('#cl_txt, #mks_txt, #comment_txt').blur(....), но это никогда не работает стабильно. Вместо этого я пробовал $('body').click(....), но затем проверка формы, кажется, прерывается, текстовые поля никогда не окрашиваются в красный цвет.

Любая помощь, пожалуйста?


person Alexander Farber    schedule 18.01.2011    source источник


Ответы (1)


Попробуйте использовать плагин jQuery для внешних событий. Также см. демонстрацию. Основная идея заключается в том, что вы делегируете элементу событие clickoutside (или даже dblclickoutside) и указываете, что должно произойти, когда оно сработает.

Надеюсь, это поможет.

person Darmen Amanbayev    schedule 18.01.2011
comment
Спасибо за интересную информацию, но я бы предпочел не представлять еще один плагин. Может быть, я мог бы как-то использовать здесь тайм-аут - через некоторое время отменить выделение полей, если ни одно из них не сфокусировано? - person Alexander Farber; 18.01.2011
comment
Конечно, можно, но я думаю, что здесь это было бы неестественно. - person Darmen Amanbayev; 19.01.2011