23.10.2014, 03:19
|
Аспирант
|
|
Регистрация: 15.02.2012
Сообщений: 51
|
|
Запретить выполнение функций
Здравствуйте.
Есть такой скрипт:
(function($) {
$(function() {
$('.form').each(function() {
var form = $(this),
btn = form.find('.submit');
form.find('.required').addClass('empty_field');
// Функция проверки полей формы
function checkInput() {
form.find('.required').each(function() {
if ($(this).val() != '') {
$(this).removeClass('empty_field');
} else {
$(this).addClass('empty_field');
}
});
}
// Функция подсветки незаполненных полей
function lightEmpty() {
form.find('.empty_field').css({
'border-color': '#d8512d'
});
setTimeout(function() {
form.find('.empty_field').removeAttr('style');
}, 1500);
}
setInterval(function() {
checkInput();
var sizeEmpty = form.find('.empty_field').size();
if (sizeEmpty > 0) {
if (btn.hasClass('disabled')) {
return false
} else {
btn.addClass('disabled')
}
} else {
btn.removeClass('disabled')
}
}, 500);
btn.click(function() {
if ($(this).hasClass('disabled')) {
lightEmpty();
return false
} else {
form.submit();
}
});
});
});
})(jQuery);
Он проверяет заполненность полей, а заодно, при пустых полях, добавляет к кнопке класс disabled.
Идем далее. Есть и такой скрипт: http://jsfiddle.net/jDYdH/2/. Который запрещает клики.
Мне нужно их объединить. Чтобы, пока не заполнены поля (т. е. на кнопке стоит класс disabled), при нажатии на кнопку ничего не происходило, кроме подсветки незаполненных полей.
Как я понял, за это отвечает вот эта строчка из второго примера:
$('.disabled').off('click');
Так вот, вопрос. В какое место верхнего кода вставить эту строчку, чтобы получилось так, как мне надо?
|
|
23.10.2014, 03:44
|
Аспирант
|
|
Регистрация: 15.02.2012
Сообщений: 51
|
|
Объясню проще.
На кнопку отправки формы (.submit), помимо вышеуказанного скрипта повешен еще один скрипт. Как сделать, чтобы этот «еще один скрипт» не выполнялся при клике, пока на кнопке стоит дополнительный класс disabled?
А, как только этот класс удалится с помощью первого скрипта (после заполнения всех полей), можно было выполнить второй скрипт.
|
|
23.10.2014, 05:43
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Потому что надо вешать не на onclick, а на onsubmit. Что вам, что "тому скрпту". И помимо("вместо" на самом деле) класса "disabled" ставить кнопке атрибут "disabled". Тогда если кнопка disabled никакого submit в принципе не пройдёт.
Умные люди придумали стандарт html, пользуйтесь им, а не лепите говновелосипеды.
__________________
29375, 35
|
|
23.10.2014, 06:02
|
Аспирант
|
|
Регистрация: 15.02.2012
Сообщений: 51
|
|
Сообщение от Aetae
|
Потому что надо вешать не на onclick, а на onsubmit. Что вам, что "тому скрпту". И помимо("вместо" на самом деле) класса "disabled" ставить кнопке атрибут "disabled". Тогда если кнопка disabled никакого submit в принципе не пройдёт.
Умные люди придумали стандарт html, пользуйтесь им, а не лепите говновелосипеды.
|
Не совсем понял, ну да ладно.
Можно проще. Сделать изменения в том втором скрипте, который привязан к этой кнопке.
Схематично так:
Если у <button> класс "disabled",
то скрипт не выполняется.
Если у <button> НЕТ класса "disabled",
то скрипт выполняется.
...
И дальше идет сам скрипт.
...
В JS я плохо понимаю, поэтому весь вопрос в том, как, вышеприведенный схематичный пример написать на JS?
|
|
23.10.2014, 07:53
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Если у кнопки дизаблед ее считайте вообще нет. Так понятно? Никакие клики-шмики, никаких субмитов - ничего не будет происходить пока кнопка запрещена.
|
|
23.10.2014, 07:55
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Следовательно когда "та функция" снимет disabled то юзер на конец то сможет ее нажать. Если сей факт как-то отражается в интерфейсе и юзер не дебил - он нажмет.
Короче говоря "другой скрипт" вам не нужен, ему нечего запрещать, все уже запрещено до него. Вам же с первого раза об этом написали выше.
|
|
23.10.2014, 07:57
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Кстати, в FF если единственный субмит на форме дизаблед, вы даже из скрипта не сможете нажать form.submit()
Ну да, а вот если вам не нужен субмит, а надо его перехватить и отправить скажем по xmlhhtp, то на субмит вешается это самое и как только кнопка раздизаблена и юзер кликнул золотую рыбку - оно самое и произойдет.
Последний раз редактировалось kostyanet, 23.10.2014 в 08:03.
|
|
23.10.2014, 08:17
|
Аспирант
|
|
Регистрация: 15.02.2012
Сообщений: 51
|
|
Сообщение от kostyanet
|
Если у кнопки дизаблед ее считайте вообще нет. Так понятно? Никакие клики-шмики, никаких субмитов - ничего не будет происходить пока кнопка запрещена.
|
У нее просто класс "disabled", а не атрибут. Т. е. она прописывается так: <button class="disabled">, а не так: <button disabled>.
Поэтому, все «клики-шмики» работают.
Если вы и комментатор выше имели в виду, что в самом скрипте надо заменить добавление класса "disabled" на добавление атрибута "disabled", то я с радостью, но не знаю как.
Скрипт, который добавляет класс в первом посте. Если поможете, буду благодарен.
|
|
23.10.2014, 08:23
|
Аспирант
|
|
Регистрация: 15.02.2012
Сообщений: 51
|
|
Но тут еще другой вопрос.
Этот скрипт для того и создан, чтобы при нажатии на кнопку, при незаполненных полях, их рамка подсвечивалась красным. Но если кнопку вообще отключить, то этого не будет происходить.
Собственно, вот живой пример: http://novi.co/test/bionica/
Последний раз редактировалось Szorstki, 23.10.2014 в 08:29.
|
|
23.10.2014, 10:20
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от Szorstki
|
Если вы и комментатор выше имели в виду, что в самом скрипте надо заменить добавление класса "disabled" на добавление атрибута "disabled"
|
"Комментатор выше" имел в виду, что валидацию формы надо делать на submit, а не на click. Тогда, во-первых, не придется велосипедить, а во-вторых...
Сообщение от kostyanet
|
Никакие клики-шмики, никаких субмитов - ничего не будет происходить пока кнопка запрещена
|
не забывайте, что submit происходит не только по клику на кнопку, но и по нажатию Enter в input type="text" и ему подобных. Следовательно, нет гарантии, что не будет "никаких субмитов" если запретить лишь кнопку.
Сообщение от Szorstki
|
Этот скрипт для того и создан, чтобы при нажатии на кнопку, при незаполненных полях, их рамка подсвечивалась красным. Но если кнопку вообще отключить, то этого не будет происходить.
|
вот и следствие велосипедостроения. Перехватывайте submit формы, как писал "комментатор выше".
Последний раз редактировалось BETEPAH, 23.10.2014 в 10:23.
|
|
|
|