jQuery: возникли проблемы с кодом для отключения ссылки после события ajax - PullRequest
1 голос
/ 02 февраля 2011

Цель: отключить ссылки до ajax: успех получен.(Затем я расскажу своему серверу приложений, что нужно включить ссылки. Я пишу простую настольную игру и не хочу получать несколько запросов ajax до того, как на первый ответ получен ответ, потому что это портит игровую логику.

  <script type="text/javascript">
      var disableLinks = false;

  $("a").click(function(e){
    if (disableLinks){
      e.preventDefault();
    }
  });


  $("a").ajaxStart(function(){
    disableLinks = true;
  });

    $("a").ajaxStop(function(){
    disableLinks = false;
  });


</script>

А вот как выглядят ссылки:

<a href="/board/take_turn?id=313&x=1&y=2" data-remote="true">
              <div class="ttt_square"> 
                &nbsp;
              </div>
</a>

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Это потому, что ваши события начала и окончания AJAX никогда не запускаются. Зачем? Потому что простое нажатие на ссылку не является запросом AJAX и не вызывает глобальные события AJAX. Чтобы использовать глобальные события AJAX, вам необходимо использовать функцию AJAX, такую ​​как .get (), .load () или $ .ajax ()

Код ниже, в основном, ваш ... Я только что добавил 2 строки (которые могут быть даже уменьшены до 1, но я думаю, что так выглядит лучше)

var disableLinks = true;

$('a').click( function( e )
{
    if( disableLinks )
    {
        e.preventDefault( );
    }

    var self = $(this);
    $.ajax( { "url": self.attr( 'href' ) } );
} );


$('a').ajaxStart( function( )
{
    disableLinks = true;
} );

$('a').ajaxStop( function( )
{
    disableLinks = false;
} );
0 голосов
/ 02 февраля 2011

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

$('a').click(function(){
    if (!this.hasClass('disabled')) {
        this.addClass('disabled');
        var self = this;
        $.ajax({url: this.attr('href'),
                complete: function(jqXHR, textStatus)
                   self.removeClass('disabled');
                }
        });

    }
    return false;
});
0 голосов
/ 02 февраля 2011

У вас есть опечатка. e.prevenDefault (); должно быть e.preventDefault ();

И этого должно быть достаточно для отключения действия по умолчанию. Так что вы можете избавиться от своего клика.

$("a").click(function(e){
    e.preventDefault();
});

Edit: Может быть так: jQuery - Как я могу временно отключить прослушиватель событий onclick после того, как событие было запущено?

или это: jQuery - Как я могу временно отключить прослушиватель события onclick после того, как событие было запущено?

должен решить вашу проблему (если вас правильно понимают)

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