Отправка формы, даже если она заключена в оператор if и условие не выполнено? - PullRequest
0 голосов
/ 18 октября 2011

У меня есть весь код проверки, связанный с $('#post-button').click. Идея в том, что переменная e_exit устанавливается в true, затем данные в форме проходят серию проверок. Если он удовлетворяет условию любого оператора if, отображается сообщение с проблемой, и для e_exit установлено значение false. Кроме того, проблема заключается в том, что это не сделано должным образом, так как форма все еще отправляется (примерно через четверть секунды после отображения сообщения).

Я имею дело с булевыми значениями, так что типизация, конечно, не может быть проблемой, я действительно не понимаю, что происходит:

$('#post-button').click( function() {
    var e_exit = true;
    var notif_message = '<div class="notification red"><div class="cross"></div>';

    var name = $('input[name=name]').val();
    var url = $('input[name=url]').val();
    var urlrgx = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?/i;
    var urltst = urlrgx.test(url);

    if(name == '' || name == 'Enter a name for this offer') {
        $('#notification').html(notif_message + "You need to enter a name for this offer name. Try to pick something that you'll easily remember when seen again.</div>");
            e_exit = false;
    }

    if(!urltst) {
        $('#notification').html(notif_message + "You need to enter a valid offer url prefixed with http:// for this offer.</div>");
            e_exit = false;
    }

    var rotation_select_val = parseInt($('select[name=r_id]').val());
    if(rotation_select_val != 0) {
        var min_val = isNaN($('input[name=r_min]').val());
        var max_val = isNaN($('input[name=r_max]').val());

        if(min_val || max_val) {
            $('#notification').html(notif_message + "You need to enter a numeric value for your rotation's min and max hits for this offer.</div>");
            e_exit = false;
        }
    }

    var geo_select_val = $('select[name=g_country\\[1\\]]').val();          
    if(geo_select_val != 0) {
        var geo_url_val = $('input[name=g_url\\[1\\]]').val();
        var geo_urltst = urlrgx.test(geo_url_val);

        if(!geo_urltst) {
            $('#notification').html(notif_message + "You need to enter a valid url prefixed with http:// for your geo-location targets.</div>");
            e_exit = false;
        }
    }

    if(e_exit) {
         $('form').submit();   
    }
});

Любые ответы на вопрос, почему это может происходить, или правки с объяснениями очень помогли бы!

1 Ответ

0 голосов
/ 18 октября 2011

Если #post-button - кнопка отправки, вам нужно вернуть false, чтобы остановить отправку формы.

Лучшим решением будет привязка к событию submit формы:

$("#your-form").submit(function() {
    // validate...

    return e_exit;
});

Это позволит отправлять форму только в том случае, если вы вернете true из обработчика событий.

Редактировать:

Возможно, плагин ajax также подписываетсяна событие click кнопки «Отправить»?В этом случае я бы возвратил false и удостоверился, что событие не будет распространяться дальше:

$("#post-button").click(function(ev) {
    // validation
    ev.stopPropagation();
    return false;
});
...