Как я могу отключить все кнопки и ссылки на моей странице, но при этом разрешить обратную передачу? - PullRequest
0 голосов
/ 05 августа 2010

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

Я попробовал две версии кода jQuery.Также не то, что я хочу:

Эта версия отключит все элементы обратной передачи, но при этом остановит срабатывание нажатого элемента.Для справки, я не думаю, что .removeAttr('onclick') действительно требуется, но его игнорирование не меняет поведение.

$(function() {
    $('a, :button, :submit').click(function() {
        var elements = $('a, :button, :submit');
        elements.attr('disabled', 'disabled').removeAttr('onclick');
    });
});

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

$(function() {
    $('a, :button, :submit').click(function() {
        var otherelements = $('a:not(#' + $(this).attr('id') + '), :button:not(#' + $(this).attr('id') + '), :submit:not(#' + $(this).attr('id') + ')');
        elements.attr('disabled', 'disabled').removeAttr('onclick');
    });
});

Как я могу предотвратить это поведение?

Ответы [ 4 ]

2 голосов
/ 05 августа 2010

Я только что протестировал ваш первый подход без JQuery, и он работал нормально, т.е. отключение кнопки отправки не помешало отправке формы.

<form method="get">
  <input type="text" name="textfield" value="a" />
  <input type="submit" onclick="this.disabled=true">
</form>

Может быть, вы хотите перепроверить, есть ли что-нибудь еще, например, JQuery, продолжается?

1 голос
/ 05 августа 2010

Может быть, вы могли бы поставить флаг или что-то такое, чтобы он мог запомнить, на какую кнопку он был нажат, и, если этот флаг существует, вы можете удалить событие onclick для этого элемента, вызывающего обратную передачу. Но я думаю, что этого нельзя сделать только с помощью сценариев на стороне клиента, поскольку после отправки страницы все элементы и сценарии на стороне клиента обновляются.

0 голосов
/ 06 августа 2010

Вот окончательная версия, которая сработала - просто переопределяя событие отправки формы, а не просматривая отдельные элементы.

var submitted = false;
$(function() {
    $('form').bind('submit', function() {
        if (!submitted) {
            submitted = true;
            return true;
        } else {
            return false;
        }
    });
});

Спасибо всем за ваши предложения.

0 голосов
/ 05 августа 2010

Возможно, вместо того, чтобы делать эту функцию щелчка, включите ее, так что она срабатывает после того, как произошло событие щелчка.

...