2016-07-12 2 views
1

Мне нужно получить форму для отправки, но когда она отправляется, мне нужно ее отключить кнопку, потому что запрос занимает несколько секунд, и люди, использующие эту форму, не понимают загрузки страниц, и поэтому они будет нажимать 5 или 6 раз на кнопку, подающую способ формы много раз. У меня был рабочий метод в Chrome, но в IE он отправляется дважды, и я знаю, почему, но я не знаю, как заставить его работать для обоих. Вот форма линия:Вопрос о представлении формы Javascript

<form method="post" id="submitItem" action="secondPage.php"> 

Я пробовал различные варианты этого, такие как использование onSubmit или другие связанные с ними идеи, но ни один работой. Решение «Working» в хроме, отправляющая дважды в IE является то, что форма вызов и следующий JS:

$(document).on("click", ".once-only", function(){ 
    $(".once-only").prop('disabled', true); 
    $('form').submit(); 
}); 

Класса «разового» прилагаются к кнопкам отправки, так после нажатия представить, что кнопка получает инвалид в оба из браузеров, но потому, что у меня есть «action = '....» в строке создания экземпляра, которую он представляет, используя это. «.submit()». Chrome не отправляет с помощью действия, а только «.submit()». Есть ли способ заставить это работать? Я пробовал большую комбинацию изменения JS для использования функции или извлечения «.submit()» или даже изменения того, что находится в строке формы, но я не понял ее. Есть идеи? IE давал мне проблемы с этим сайтом в любое время, когда я использую JS, AJAX работает только в хроме для всех моих других страниц, поэтому я НЕВОЗМОЖНО использовать IE, но более половины людей, использующих сайт, даже не знают, что такое хром. Какие-нибудь советы? При необходимости я могу поделиться любым другим кодом!

ответ

4

Попробуйте это:

$(document).on("click", ".once-only", function(event) { 
    event.preventDefault(); //this should disable the default form submit action 
    $(".once-only").prop('disabled', true); 
    $('form').submit(); 
}); 
1

но в IE он представляет дважды

Для этого вы можете сначала off или отвязать щелчок с последующим on

// If the button is not dynamically generated , there is no need to delegate the event 
$('.once-only).off('click').on("click",function(event){ 
    // Rest of the code 
}) 

За секунду выпуск

вы можете использовать button type = "button" затем использовать Ajax вместо формы action

В качестве альтернативы вы можете использовать button type="submit"

$('.once-only').off('click').on("click",function(event) { 
    event.preventDefault(); //prevent default behavior 
    $(".once-only").prop('disabled', true); 
    $.ajax({ 
    url:'some url' 
    //Rest of code 
    }) 
}); 

Примечание Аякса также работает в IE

0

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

или как это: onclick="this.form.submit();this.enabled=false;"


поэтому реальный ответ это

onclick="setTimeout((function(){ this.disabled = true; }).bind(this),0);"

объяснение: это инструктирует браузер, чтобы отключить кнопку позже; поскольку JS работает в цикле событий, вы ставите в очередь событие тайм-аута, которое будет делать это за пределами события onclick.

Я думаю, что это просто глупо хром, чтобы заставить меня сделать этот трюк.

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