Як зробити так, щоб кнопка HTML не перезавантажувала сторінку


116

У мене є кнопка ( <input type="submit">). Після натискання сторінки перезавантажується. Оскільки у мене є деякі hide()функції jQuery , які викликаються при завантаженні сторінки, це призводить до того, що ці елементи знову приховуються. Як змусити кнопку нічого не робити, тому я все ще можу додати певну дію, яка виникає при натисканні кнопки, але не перезавантажуванні сторінки.

Відповіді:


228

не потрібно js або jquery. щоб зупинити перезавантаження сторінки, просто вкажіть тип кнопки як "кнопка". якщо ви не вкажете тип кнопки, браузер встановить його на «скинути» або «надіслати», що викликає перезавантаження сторінки.

 <button type='button'>submit</button> 

3
Це справді працює! Це хороша альтернатива <input type='button' />.
Рік

5
Це добре працює, особливо у випадку Chrome (на який прийнята відповідь не відповідає)
hobailey

3
Робота над Chrome у Windows 10. Так!
ssdscott

82

Використовуйте або <button>елемент, або використовуйте <input type="button"/>.


110
Елемент <button> за замовчуванням викликає перезарядження в хромі (принаймні).
AdamC

2
ви все одно можете використовувати форму під час подання події та повернути помилкове значення, якщо ви все ще не хочете повертатися
neu-rah

4
@Joe насправді це так: / Мені потрібен мій webapp, щоб працювати на IE8, і це перезавантаження щось дратує ...
Пані Ніхто

24
@pbeardshear Це робиться, якщо він розміщений у формі. коли <button>розміщується поза формою, оновлення не відбувається!
Kevinvhengst

13
додайте type="button"до <button>елемента в хромі, і це не оновлює
Johnny Metz

21

В HTML:

<form onsubmit="return false">
</form>

щоб уникнути оновлення взагалі "кнопок", навіть при призначенні onclick.


15

Ви можете додати обробник кліків на кнопку за допомогою jQuery і повернути помилкове.

$("input[type='submit']").click(function() { return false; });

або

$("form").submit(function() { return false; });

6
Це не працює. Повернення фальшивого хрому, принаймні в останніх версіях, все ще викликає оновлення.
користувач3690202

Це єдина відповідь, яка насправді працювала на мене. Щойно я оголосив, що функція return false у своїй функції, і оновлення припинилося як у сафарі, так і в хромі.
VessoVit

13

В HTML:

<input type="submit" onclick="return false">

З jQuery, якийсь подібний варіант, вже згаданий.


9

Ви можете скористатися формою, що включає кнопку подання. Потім використовуйте jQuery, щоб запобігти поведінці форми за замовчуванням:

$(document).ready(function($) {
  $(document).on('submit', '#submit-form', function(event) {
    event.preventDefault();
  
    alert('page did not reload');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form id='submit-form'>
  <button type='submit'>submit</button>
</form>


4

Як зазначено в одному з коментарів (похованих) вище, це можна виправити, не розміщуючи тег кнопки всередині тегу форми. Якщо кнопка знаходиться поза формою, сторінка не оновлюється.


2

Я поки не можу коментувати, тому я публікую це як відповідь. Кращий спосіб уникнути перезавантаження, як @ user2868288 сказав: використовуючи onsubmitна formтезі.

З усіх інших згаданих тут можливостей, це єдиний спосіб, який дозволяє запускати нову перевірку введення даних браузера HTML5 ( <button>не робити це, ані обробники jQuery / JS) та дозволяє додавати динамічну інформацію jQuery / AJAX до сторінки. Наприклад:

<form id="frmData" onsubmit="return false">
 <input type="email" id="txtEmail" name="input_email" required="" placeholder="Enter a valid e-mail" spellcheck="false"/>
 <input type="tel" id="txtTel" name="input_tel" required="" placeholder="Enter your telephone number" spellcheck="false"/>
 <input type="submit" id="btnSubmit" value="Send Info"/>
</form>
<script type="text/javascript">
  $(document).ready(function(){
    $('#btnSubmit').click(function() {
        var tel = $("#txtTel").val();
        var email = $("#txtEmail").val();
        $.post("scripts/contact.php", {
            tel1: tel,
            email1: email
        })
        .done(function(data) {
            $('#lblEstatus').append(data); // Appends status
            if (data == "Received") {
                $("#btnSubmit").attr('disabled', 'disabled'); // Disable doubleclickers.
            }
        })
        .fail(function(xhr, textStatus, errorThrown) { 
            $('#lblEstatus').append("Error. Try later."); 
        });
     });
   }); 
</script>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.