【问题标题】:how to disable link after clicking once with jquery使用jquery单击一次后如何禁用链接
【发布时间】:2017-04-17 04:49:53
【问题描述】:

如何在使用 jquery 单击链接后禁用链接。单击链接时,它会在具有唯一 ID 的 div 内添加一个输入字段。我正在从变量的下拉列表中获取值。

  $(document).ready(function() {
        var count = 1;
        $(".block").on('click', function(){
            $("#textInput").append(
                '<div class="cgparent" id="input'+count+'">' +
                '<div class="col-md-8">' +
                '<input class="form-control"  type="text">' +
                '</div>' +
                '<div class="col-md-4">' +
                '<button style="margin-right: 5px" class="btn btn-info" id="edittext"><i class="fa fa-pencil" aria-hidden="true"></i></button>' +
                '<button class="btn btn-danger" type="button" id="removebtn"><i class="fa fa-trash-o" aria-hidden="true"></i></button>' +
                '</div>' + '<br><br>' +
                '</div>'
            ).show();
            count++;
        });
    });



 <?php if ($table_name == "questions") {?>
                <div  class="dropdown" >
                    <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Add Block
                        <span class="caret"></span>
                    </button>
                    <ul  class="dropdown-menu">
                        <?php
                        $question_fields = $this->db->list_fields('questions');
                        for ($i=0; $i<count($question_fields); $i++){?>
                            <li><a class="block" ><?php echo $question_fields[$i]?></li>
                        <?php } ?>
                    </ul>
                </div>
            <?php  } ?>

【问题讨论】:

    标签: javascript php jquery html twitter-bootstrap


    【解决方案1】:

    如果添加一些 CSS 对你来说没问题,这是我发现的最简单的:

    Javascript:

    $(document).on('click', '#buttonSelector', function () {
        $(this).addClass('disabled');
    });
    

    CSS:

    .disabled {
        /* if you also want it to fade a bit:  
           opacity: 0.5
        */
        pointer-events: none;
        cursor: default;
    }
    

    【讨论】:

    • 如果使用 Bootstrap,这将在不添加 CSS 的情况下工作 ?
    【解决方案2】:

    单击链接后,使用以下代码将变量设置为 true。再次点击链接后会忽略该点击。

    $(document).ready(function() {
            var count = 1;
            var clicked = false;
            $(".block").on('click', function(e){
                if(clicked) {
                    e.preventDefault();
                }
                clicked = true;
                $("#textInput").append(
                    '<div class="cgparent" id="input'+count+'">' +
                    '<div class="col-md-8">' +
                    '<input class="form-control"  type="text">' +
                    '</div>' +
                    '<div class="col-md-4">' +
                    '<button style="margin-right: 5px" class="btn btn-info" id="edittext"><i class="fa fa-pencil" aria-hidden="true"></i></button>' +
                    '<button class="btn btn-danger" type="button" id="removebtn"><i class="fa fa-trash-o" aria-hidden="true"></i></button>' +
                    '</div>' + '<br><br>' +
                    '</div>'
                ).show();
                count++;
            });
        });
    

    【讨论】:

      【解决方案3】:

      我会通过设置一个计数器来做到这一点。如果计数器大于零,则表示该链接已被点击。

      <a class="once-only" href="/do-stuff">Click me</a>
      
      <script type="text/javascript">
      $(document).ready(function ($) {
          var clicked = 0;
          $(document).on('click', '.once-only', function () {
              if (clicked != 0) {
                  return false;
              }
              var clicked = clicked + 1;
          });
      });
      </script>
      

      更新

      The comments brought this solution:
      
      <script type="text/javascript">
      $(document).ready(function ($) {
          $(document).on('click', '.once-only', function () {
              ​$(this).contents().unwrap();​​
          });
      });
      </script>
      

      以上将简单地删除锚。

      【讨论】:

      • 您可以通过添加一个类并检查该类来做到这一点,然后它可以跨多个链接重用,而不需要为每个链接一个新的 var/handler。但原理是一样的。
      • @freedomn-m 那行不通。删除once-only后仍然是一个链接
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      相关资源
      最近更新 更多