如何只执行一次Jquery代码?

时间:2014-06-06 07:24:42

标签: javascript jquery css hide padding

我有一个jquery方法,我在点击按钮时使用了调用该方法。 所以在那段代码中我有一行" $("#loadingMessage").css('padding-top','6%');"当我们第一次调用该方法时,我需要这一行只执行一次,后来我走了这一行。

所以请帮助我找到一种方法

整个方法脚本位于

之下
$('#SearchButton').click(function() {                 
         $(".spinner").css('visibility','hidden');

         $("#loadingMessage").css('padding-top','6%'); //I want this line execute only once, i mean first time

         loaderStart();
         document.getElementById('loadinggif3').style.display = "block";
         $("#loadinggif3").show();
         $(".col-sm-9").css('visibility','hidden');
          var str = $('#SearchText').val();
          str = str.trim();
         if(str=="") return false;
        )};

9 个答案:

答案 0 :(得分:15)

使用jQuery .one()。使用.one()方法时,事件处理函数仅对每个元素运行一次。

$('#SearchButton').one("click", function () {
    $("#loadingMessage").css('padding-top', '6%');
});

$('#SearchButton').click(function () {
    $(".spinner").css('visibility', 'hidden');

    loaderStart();
    document.getElementById('loadinggif3').style.display = "block";
    $("#loadinggif3").show();
    $(".col-sm-9").css('visibility', 'hidden');
    var str = $('#SearchText').val();
    str = str.trim();
    if (str == "") return false;
});

答案 1 :(得分:10)

使用布尔值作为全局变量,如

var flag = true;

现在,在执行之前设置条件,比如

if(flag){  
$("#loadingMessage").css('padding-top','6%');  
flag=false;  
}

答案 2 :(得分:7)

如果您想限制#SearchButton点击事件只触发一次,请使用.one方法

$('#SearchButton').one('click', function() {
  ...
});

答案 3 :(得分:4)

如果你必须只运行一次没有特定事件绑定的通用函数,那么使用它。

$(document).one('ready', function(){
   // your code
   $("#id").on("click", function() {
        // other code
   });
});

如果在多次调用的函数内部有用(防止多次触发onclick事件)

答案 4 :(得分:2)

快速而又脏兮兮的'溶液:

$.first_time = true;
$('#SearchButton').click(function() {                 
    if($.first_time == true) $("#loadingMessage").css('padding-top','6%');
    $.first_time = false;
});

一些解释:您需要一个全局jQuery变量(在此示例中为$.first_time),以便在click事件的匿名函数中仍然知道它。

答案 5 :(得分:1)

使用.one一次,然后点击其他人。检查下面

  <script>
    $(document).ready(function() {
    $('#SearchButton').one('click', function() {
         $("#loadingMessage").css('padding-top','6%'); //I want this line execute only once, i mean first time

    });    


$('#SearchButton').click(function() {                 
         $(".spinner").css('visibility','hidden');


         loaderStart();
         document.getElementById('loadinggif3').style.display = "block";
         $("#loadinggif3").show();
         $(".col-sm-9").css('visibility','hidden');
          var str = $('#SearchText').val();
          str = str.trim();
         if(str=="") return false;
        });


  } ); 

       </script>  

答案 6 :(得分:1)

您可以使用js闭包解决问题。

function once(func) {
    let isExec = false;
    return function(...arg) {
        if (isExec) return void 0;
        isExec = true;
        func.apply(null, arg)
    }
}

答案 7 :(得分:0)

你可以检查它,检查填充顶部。如果不是6%,则需要进行设置。如果是,则跳过该行。提示:将$('#loadingMessage')的结果放在变量中,这样就不必进行第二次元素查找。

像这样(未经测试):

$('#SearchButton').click(function() {                 
    var $loadMsg = $("#loadingMessage");

    if($loadMsg.css('padding-top') !== '6%'){
         $loadMsg.css('padding-top', '6%');
    }
});

这当然是假设您希望每次都在Click处理程序中执行其余代码。否则,您可以在执行处理程序后取消绑定单击。提示:改为使用jQuery on()和off()方法。

答案 8 :(得分:0)

您可以在所有语言中使用bolean。

在jquery中:

var isFirst = true;

if(isFirst){  
$("#loadingMessage").css('padding-top','6%');  
isFirst=false;  
}