首次单击后停止一个函数,以防止更多的执行

时间:2017-04-30 08:50:36

标签: javascript php jquery ajax

我有这个功能

        function display() {
        $.ajax({
            url: "new.php",
            type: "POST",
            data: {
                textval: $("#hil").val(),

            },
            success: function(data) {
                $('.daily').html(data);
            }

        });
    }

它实现了它的目的,唯一的问题是,用户可以尽可能多地点击<a href="#" onclick="display();"></a>,并且它会向new.php发送尽可能多的请求。 我想要的是将其限制为只需单击1次,直到下一页刷新或缓存清除。

5 个答案:

答案 0 :(得分:1)

这应该做你想做的事:
设置一个全局变量,用于存储函数是否已被调用/执行。

onceClicked=false;

function display() {
    if(!onceClicked) {
      onceClicked=true;

      $.ajax({
        url: "new.php",
        type: "POST",
        data: {
            textval: $("#hil").val(),

        },
        success: function(data) {
            $('.daily').html(data);
        }

      });
    }
}

答案 1 :(得分:1)

简单的例子是:

<script>
var exec=true;
function display() {
    if(exec){
        alert("test");
        exec=false;
    }
}
</script>

<button onclick="javascript:display();">Click</button>

在你的情况下,它将是:

var exec=true;
function display() {
    if(exec){
        $.ajax({
            url: "new.php",
            type: "POST",
            data: {
                textval: $("#hil").val(),

            },
            success: function(data) {
                $('.daily').html(data);
                exec=false;
            }

        });
    }
}

答案 2 :(得分:0)

在onclick期间,将布尔标志设置为true以指示用户在调用display()函数之前单击了该链接。在display()函数内部,检查布尔标志并仅在它为真时继续。在AJAX完成处理(成功或失败)后将标志重置为false。

答案 3 :(得分:0)

您可以使用下面的Lock变量。

var lock = false;
function display() {
        if (lock == true) {
            return;
        }
        lock = true;
        $.ajax({
            url: "new.php",
            type: "POST",
            data: {
                textval: $("#hil").val(),
        },
        success: function (data) {
            $('.daily').html(data);
            lock = false;
        }
    });
}

答案 4 :(得分:0)

你也可以用这种方式实现这个

$(function() {
  $('#link').one('click', function() {
    alert('your execution one occured');
    $(this).removeAttr('onclick');
    $(this).removeAttr('href');
  });
});

function display(){

alert('your execution two occured');

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a  href="#" onclick="display();" id='link'>Have you only one chance</a>