2013-08-04 3 views
0

Я представляю форму с использованием JQuery и прослушивателя событий, связанного с div (а не поле ввода), и я пытаюсь предотвратить несколько отправлений, поэтому клиент не получает переплату. Я пытаюсь выполнить это, удалив класс submit-button щелкнутого div, поэтому в следующий раз, когда пользователь нажмет на него, JQuery не будет прослушивать событие, связанное с submit-button, предотвращающим несколько отправлений.Предотвращение отправки нескольких форм

Использование реализации ниже, однако, по какой-либо причине не предотвращает несколько отправлений, как предполагалось.

HTML

<div class="submit-button button-style">Submit</div> 

JQuery

$(".submit-button").click(function(){ 
    $(this).removeClass("submit-button"); 
    //**submit form** 
}); 

Примечание: Я должен придерживаться решений, которое использует HTML выше, поэтому растворы с использованием input элемента типа submit, не будет полезным.

Я ценю любые предложения о том, как это сделать. Спасибо заранее!

+2

Итак, теперь вам нужно иметь дело с повторной валидацией и повторным рендерингом. Позвольте мне сделать это просто: если вы хотите, чтобы это работало правильно, * сделайте это правильно *. Это означает «элемент ввода» типа 'submit'. Он * существует * для обработки этого прецедента. Вы можете поместить своих пользователей в радость от повторного изучения того, что разработчики веб-браузера исчерпывающе отлаживают за последние 15 лет, если вы хотите, или можете просто сделать это правильно. Я бы рекомендовал последнее. – AdamKG

+0

Я ценю ответ. Если это был мой выбор, я бы выбрал правильный путь, используя поле 'input'. Тем не менее, даже при использовании поля «input» необходимо принять некоторые меры для предотвращения подачи нескольких форм, это не автоматическое. – AnchovyLegend

+0

@AdamKG Pah! Разве вы не знаете, что доступность для слабых! Конвоированные конструкции способствуют СООТВЕТСТВИИ в вашей пользовательской базе. И если им это не нравится, они могут просто открыть консоль и написать свой собственный код. – Dave

ответ

1

Вы можете использовать .one(), чтобы предотвратить его от стрельбы несколько раз -

$(".submit-button").one('click',function(){ 
    //**submit form** 
}); 

http://api.jquery.com/one/

Edit:

В случае ошибки:

function submitForm(){ 
    //**submit form** 
    $.post('submit.php').error(function(){ 
     // rebind event on error 
     $(".submit-button").one('click',submitForm); 
    }); 
} 
$(".submit-button").one('click',submitForm); 
+1

избили меня на 13 секунд! – dezman

+0

+1, Спасибо за предложение!Это кажется полезным, я никогда не слышал о 'one()' :), однако есть небольшая проблема, если есть ошибки сервера, мне нужно снова включить дополнительную попытку ... любые предложения здесь? – AnchovyLegend

+0

@AnchovyLegend В случае ошибки вы можете повторно связать событие с '.one()' –

0

Вы могли бы используйте что-то вроде:

$('something').one('click', function(){ 
    // submit code 
}); 

Которая будет стрелять только один раз.

0

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

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

var submitted = false; 
$("form#myForm").submit(function(evt){ 
    if (submitted) { 
     evt.preventDefault();//stops form submission 
     return; 
    } 

    submitted = true; 
}); 

Я пропустил проверку формы для этого примера.

Смежные вопросы