Прототип: как предотвратить нажатие кнопки, пока не получен ответ - PullRequest
2 голосов
/ 02 июня 2009

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

<a href='#' onclick="new Ajax.Updater('history', '/responsesG', {parameters: {name: '%s', port: '%s', profil: '201', action: 'profile'}, 
    insertion: Insertion.Top}
        ); return false;">Do something</a>

поскольку это дорогостоящий вызов, я бы хотел, чтобы пользователь не нажимал на него несколько раз, поскольку он выполняет асинхронный вызов, и он получает, например, 3 ответа на одну и ту же вещь (поскольку ответ длится от 3 до 5 секунд).

асинхронный: ложь

с тем же успехом (неудачей). Как я могу это сделать?

Edit:

<a href="#" onclick="diagnostika('mac_adresa');return false;">-Mac address</a>
<script type="text/javascript">
function diagnostika(akcija) {
            if(!this.clicked) {
                this.clicked = true;
                button = this;
                new Ajax.Updater('history', '/responsesG', {
                    parameters: {
                        name: '%(name)s',
                        port: '%(port)s',
                        action: akcija},
                    insertion: Insertion.Top,
                    onComplete: function() {
                    button.clicked = false;}});}
                return false;};
</script>

Это то, что я реализовал в конце.

Ответы [ 5 ]

3 голосов
/ 02 июня 2009

Присвойте своей ссылке уникальный идентификатор, например:

<a href="#" id="foo">Do something</a>

Тогда в вашем JavaScript вы можете сделать это:

$("foo").observe("click", function() {
  this.disabled = true;
  new Ajax.Updater("history", "/responsesG",
                   { parameters: { name: "%s",
                                   port: "%s",
                                   profile: "201",
                                   action: "profile" },
                   insertion: Insertion.Top });
  return false;
});
2 голосов
/ 02 июня 2009

Вам нужно будет добавить что-то вроде:

if(!this.clicked) {
    this.clicked = true;
    button = this;
    new Ajax.Updater('history', '/responsesG', {
        parameters: {
            name: '%s',
            port: '%s',
            profile: '201',
            action: 'profile'
        },
        insertion: Insertion.Top,
        onComplete: function() {
            button.clicked = false;
        }
    });
}

return false;

Но, действительно, выведите это из встроенного onClick, чтобы его было легче читать.

0 голосов
/ 02 июня 2009

возвращает глобальный флаг onclick, который имеет значение false, когда запрос завершается, и возвращается к true, когда он возвращается

0 голосов
/ 02 июня 2009

отправьте onclick для вашей собственной функции, отключите кнопку, запустите таймер, который снова включит кнопку, затем выполните Ajax.Updaer.

0 голосов
/ 02 июня 2009

Отключить (или даже скрыть) ссылку в обработчике onclick, а затем снова включить или показать ее при получении ответа.

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