javascript - 在 jQuery .load() 完成之前使按钮不可点击

标签 javascript jquery jquery-events

我目前正在为我的阅读更多按钮使用以下代码:

$(document).ready(function() {
  $("a.more-link").attr("href", "");
  $("a.more-link").attr("onclick", "return false;");  
      
  $('.readmore').each(function(index) {
    var $link = $(this);
    $(".readmore").prependTo('.' + $link.attr("id") + ' > #bottominfo');
  });
      
  $('.readmore').click(function() {  
    var $link = $(this);
    if ( $link.attr("alt") == "read more" ) {
      $('.' + $link.attr("id") + ' > #maincontent').load($link.attr("title") + ' #mainarticle', function(index) {
            $('.' + $link.attr("id") + ' > #maincontent').hide();  
            $('.' + $link.attr("id") + ' > #maincontent').slideToggle('slow');
          });
       
      $('.' + $link.attr("id") + ' > #maincontent').attr("class", $link.attr("id"));
       
      $link.attr('alt','read less');      
    } else {
      $('#'+ $link.attr("id") + ' > .' + $link.attr("id")).hide();
      $link.attr('alt','read more'); 
    }
    return false;
 });
});

我遇到的问题是,如果用户双击(或多次)按钮,它会多次调用该函数。

如何在 .load() 完成之前使按钮不可点击?

最佳答案

最简单的方法是向链接添加一个加载类。我也刚刚对您的代码进行了快速清理。我没有研究它是如何工作的,但我敢肯定,如果你多花点时间,你可以让它更有效率

$(document).ready(function() {
  $("a.more-link").attr("href", "")
                  .attr("onclick", "return false;");  

  $('.readmore').each(function(index) {
    var $link = $(this);
    //wouldn't this call all the elements with "readmore" class????
    $(".readmore").prependTo('.' + $link.attr("id") + ' > #bottominfo');
  });

  $('.readmore').click(function() {
    var $link = $(this);

    //check if it has already been clicked
    if($link.hasClass("loading")) return false;
    //add the loading class
    $link.addClass("loading");


    if ( $link.attr("alt") == "read more" ) {
      $('.' + $link.attr("id") + ' > #maincontent').load($link.attr("title") + ' #mainarticle', function(index) {
            $('.' + $link.attr("id") + ' > #maincontent').hide()
                                                         .slideToggle('slow');

            //it's done now and we can remove the loading class so we can click it again
            $link.removeClass("loading");

          }).attr("class", $link.attr("id"));

      $link.attr('alt','read less');      
    } else {
      $('#'+ $link.attr("id") + ' > .' + $link.attr("id")).hide();
      $link.attr('alt','read more');

      //add it here as well
      $link.removeClass("loading");
    }
    return false;
 });
});

提示:我注意到您多次调用相同的选择器。始终检查 api doc看看你调用的方法会返回什么。它们中的大多数会返回元素,因此您可以在没有 $()

的情况下调用下一个方法

示例:$("div").hide().slideToggle('slow');

关于javascript - 在 jQuery .load() 完成之前使按钮不可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996415/

相关文章:

javascript - 为什么在调用 event.preventDefault() 后用 JavaScript 切换复选框/单选按钮失败?

javascript - 为 HTML5 中的视频标签手动触发全屏按钮点击事件

javascript - <a> 标签在由 jQuery 生成时未完全换行

javascript - 您可以采用 Javascript 库并在 Flash 中运行它吗?

jquery - 从具有相同类的多个 div 中获取输入字段的值

html - Jquery Click 事件在第一次点击时不触发,但在第二次点击时触发,为什么?

javascript - 三个 .indexOf 不匹配 - 返回另一个结果

javascript - 单击时创建 "box-webpage"

javascript - 如果未选中 JavaScript 中的复选框,则表循环

javascript - IE9文本框focusout事件和输入问题