Тип отправить против кнопки типа - PullRequest
2 голосов
/ 03 сентября 2010

У меня есть кнопка, которая прямо сейчас установлена ​​как тип «отправить». Это вызывает контроллер, выполняет некоторый код и возвращает обратно к представлению. Когда я использую jquery, чтобы скрыть кнопку, я вижу, что, когда я нажимаю на кнопку, то, что у меня есть, скрывает кнопку, но как только возвращается вид, кнопка больше не скрывается. В то время как с типом «кнопка», когда я нажимаю кнопку, это скрывает кнопку, но не выполняет код в контроллере. Есть ли способ скрыть кнопку типа «отправить», чтобы при возврате представления кнопка все еще была скрыта?

 $('#btnAdd').click(function() {
            $('#btnAdd').hide();
        });

Ответы [ 4 ]

2 голосов
/ 03 сентября 2010

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

Что ты хочешь?
Нажав кнопку, сделайте что-нибудь на стороне сервера, не меняйте текущую страницу :
Используйте кнопку типа кнопки, используйте ajax для вызова на стороне сервера. Или используйте кнопку типа submit и сделайте то, что сказал Пабло http://en.wikipedia.org/wiki/Post/Redirect/Get на стороне сервера.

Нажав кнопку, сделайте что-нибудь на сервере, оставьте отзыв пользователя : Используйте <form method="post" для разметки вашей формы. Используйте кнопку отправки для вызова на стороне сервера. На стороне сервера скрыть кнопку отправки, если она вызывается методом post (вызов страницы со ссылкой или ввод ее в поле адреса вызывает метод method = get).

В чем разница между типом отправки и тип кнопки? Кнопка отправки работает без JavaScript, чтобы отправить некоторые входные данные на стороне сервера. Окружающая форма отправляется на сервер, а ответ отправляется в браузер. Кнопке Button нужен обработчик javascript onclick, функция javascript. Обработчик onclick вызывается, когда пользователь нажимает кнопку.

2 голосов
/ 03 сентября 2010

<input type='submit'> создает кнопку, которая отправляет форму на сервер и запускает код вашего сервера. Если вы хотите, чтобы кнопка скрывалась при возврате страницы, вам нужно добавить логику на страницу, чтобы сделать это. Как вы это сделаете, будет зависеть от вашей серверной технологии (php, .net и т. Д.).

Причина, по которой поведение с <button> отличается, заключается в том, что <button> s не отправляют форму (если вы не добавите больше кода, чтобы заставить их сделать это) ... поэтому вышеупомянутые вещи никогда не происходят. Это не так много, что <button> остается скрытым столько, сколько страница никогда не изменяется / перезагружается. Если вы добавили код в <button>, чтобы он обновлял страницу, он также появится снова.

0 голосов
/ 03 сентября 2010

Когда ваша форма отправлена ​​и ваш контроллер обрабатывает данные, если определенные критерии удовлетворены, вы можете установить временную переменную сеанса или файл cookie в коде на стороне сервера. Таким образом, в основном страница будет проверять эту переменную при каждой загрузке страницы. Пример в PHP:

if( empty($_SESSION['temp']['hideSubmitButton']) ) {
    $submitButton = '<button type="submit">Normal Button</button>';
} else {
    $submitButton = '<button type="submit" disabled="disabled">Disabled Button</button>';
    // or $submitButton = '';
}

Но тогда вы должны решить, когда отменять () переменную $ _SESSION ['temp'] или $ _COOKIE ['temp'].

0 голосов
/ 03 сентября 2010

Поскольку страница будет перезагружена после нажатия кнопки отправки, кнопка появится снова. Один быстрый и грязный, чтобы получить то, что вы хотите, это ...

Сначала создайте скрытое поле

<input type="hidden" id="hidden" value="" />

Затем, когда вы нажимаете кнопку отправки, в событии щелчка для кнопки отправки выполните что-то вроде этого.

$('#submit').click(function() {
  $('#hiddenField').val("1");
  $('#form').submit();
  return false;
});

Теперь в вашем контроллере используйте значение hiddenField для передачи некоторой переменной в представление, которое можно использовать следующим образом ...

<?php if($hidden == "1"): ?>
  <input type="submit" id="submit" value="Submit" />
<?php endif; ?>

Что касается кнопки, не отправляющей форму, она не будет отправлять форму, пока вы сами не отправите форму по событию нажатия кнопки. Как то так ...

$('button').click(function() {
   $('#form').submit();
});

Конечно, как я уже говорил, это быстрый и грязный способ реализации нужной вам функции, есть и лучшие способы - с помощью AJAX реализация также может меняться в зависимости от того, какой язык на стороне сервера вы используете (здесь я использовал php ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...