Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Запретить выполнение функций (https://javascript.ru/forum/dom-window/51065-zapretit-vypolnenie-funkcijj.html)

Szorstki 23.10.2014 03:19

Запретить выполнение функций
 
Здравствуйте.
Есть такой скрипт:
(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');

Так вот, вопрос. В какое место верхнего кода вставить эту строчку, чтобы получилось так, как мне надо?

Szorstki 23.10.2014 03:44

Объясню проще.
На кнопку отправки формы (.submit), помимо вышеуказанного скрипта повешен еще один скрипт. Как сделать, чтобы этот «еще один скрипт» не выполнялся при клике, пока на кнопке стоит дополнительный класс disabled?
А, как только этот класс удалится с помощью первого скрипта (после заполнения всех полей), можно было выполнить второй скрипт.

Aetae 23.10.2014 05:43

Потому что надо вешать не на onclick, а на onsubmit. Что вам, что "тому скрпту". И помимо("вместо" на самом деле) класса "disabled" ставить кнопке атрибут "disabled". Тогда если кнопка disabled никакого submit в принципе не пройдёт.
Умные люди придумали стандарт html, пользуйтесь им, а не лепите говновелосипеды.

Szorstki 23.10.2014 06:02

Цитата:

Сообщение от Aetae (Сообщение 337049)
Потому что надо вешать не на onclick, а на onsubmit. Что вам, что "тому скрпту". И помимо("вместо" на самом деле) класса "disabled" ставить кнопке атрибут "disabled". Тогда если кнопка disabled никакого submit в принципе не пройдёт.
Умные люди придумали стандарт html, пользуйтесь им, а не лепите говновелосипеды.

Не совсем понял, ну да ладно.
Можно проще. Сделать изменения в том втором скрипте, который привязан к этой кнопке.
Схематично так:
Если у <button> класс "disabled",
    то скрипт не выполняется.
Если у <button> НЕТ класса "disabled",
    то скрипт выполняется.
...
И дальше идет сам скрипт.
...

В JS я плохо понимаю, поэтому весь вопрос в том, как, вышеприведенный схематичный пример написать на JS?

kostyanet 23.10.2014 07:53

Если у кнопки дизаблед ее считайте вообще нет. Так понятно? Никакие клики-шмики, никаких субмитов - ничего не будет происходить пока кнопка запрещена.

kostyanet 23.10.2014 07:55

Следовательно когда "та функция" снимет disabled то юзер на конец то сможет ее нажать. Если сей факт как-то отражается в интерфейсе и юзер не дебил - он нажмет.

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

kostyanet 23.10.2014 07:57

Кстати, в FF если единственный субмит на форме дизаблед, вы даже из скрипта не сможете нажать form.submit()

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

Szorstki 23.10.2014 08:17

Цитата:

Сообщение от kostyanet (Сообщение 337051)
Если у кнопки дизаблед ее считайте вообще нет. Так понятно? Никакие клики-шмики, никаких субмитов - ничего не будет происходить пока кнопка запрещена.

У нее просто класс "disabled", а не атрибут. Т. е. она прописывается так: <button class="disabled">, а не так: <button disabled>.
Поэтому, все «клики-шмики» работают.
Если вы и комментатор выше имели в виду, что в самом скрипте надо заменить добавление класса "disabled" на добавление атрибута "disabled", то я с радостью, но не знаю как.
Скрипт, который добавляет класс в первом посте. Если поможете, буду благодарен.

Szorstki 23.10.2014 08:23

Но тут еще другой вопрос.
Этот скрипт для того и создан, чтобы при нажатии на кнопку, при незаполненных полях, их рамка подсвечивалась красным. Но если кнопку вообще отключить, то этого не будет происходить.
Собственно, вот живой пример: http://novi.co/test/bionica/

BETEPAH 23.10.2014 10:20

Цитата:

Сообщение от Szorstki
Если вы и комментатор выше имели в виду, что в самом скрипте надо заменить добавление класса "disabled" на добавление атрибута "disabled"

"Комментатор выше" имел в виду, что валидацию формы надо делать на submit, а не на click. Тогда, во-первых, не придется велосипедить, а во-вторых...
Цитата:

Сообщение от kostyanet
Никакие клики-шмики, никаких субмитов - ничего не будет происходить пока кнопка запрещена

не забывайте, что submit происходит не только по клику на кнопку, но и по нажатию Enter в input type="text" и ему подобных. Следовательно, нет гарантии, что не будет "никаких субмитов" если запретить лишь кнопку.
Цитата:

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

вот и следствие велосипедостроения. Перехватывайте submit формы, как писал "комментатор выше".


Часовой пояс GMT +3, время: 21:17.