Jqueryメソッドが1つあり、ボタンをクリックするとそのメソッドを呼び出します。そのため、そのコードには1行 "$("#loadingMessage").css('padding-top','6%');
"があります。このメソッドを最初に呼び出したときに、この行を1回だけ実行する必要があります。
だから一つの方法を見つけるのを手伝ってください
メソッドスクリプト全体は以下です
$('#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;
)};
jQuery .one() を使用します。 .one()メソッドを使用する場合、イベントハンドラー関数は各要素に対して1回だけ実行されます。
$('#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;
});
次のようにブール値をグローバル変数として使用します
var flag = true;
次に、実行前に条件を設定します。
if(flag){
$("#loadingMessage").css('padding-top','6%');
flag=false;
}
#SearchButtonクリックイベントを1回だけ起動するように制限する場合は、.one
方法
$('#SearchButton').one('click', function() {
...
});
特定のイベントバインディングなしで汎用関数を1回だけ実行する必要がある場合は、これを使用します。
$(document).one('ready', function(){
// your code
$("#id").on("click", function() {
// other code
});
});
何度も呼び出される関数内で有用です(何度も起動されるbeeinからのonclickイベントを防ぎます)
迅速で「汚い」ソリューション:
$.first_time = true;
$('#SearchButton').click(function() {
if($.first_time == true) $("#loadingMessage").css('padding-top','6%');
$.first_time = false;
});
説明:グローバルなjQuery
変数が必要です($.first_time
この例では)、クリックイベントの匿名関数内でまだ知られています。
jsクロージャーを使用して質問を解きます。
function once(func) {
let isExec = false;
return function(...arg) {
if (isExec) return void 0;
isExec = true;
func.apply(null, arg)
}
}
.oneを1回使用し、click for others.checkを使用します
<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>
すべての言語でブール値を使用できます。
jqueryで:
var isFirst = true;
if(isFirst){
$("#loadingMessage").css('padding-top','6%');
isFirst=false;
}
パディングトップをチェックするチェックを囲むことができます。 6%でない場合は、設定する必要があります。そうである場合、行をスキップします。ヒント:$( '#loadingMessage')の結果を変数に入れると、2番目の要素検索を行う必要がなくなります。
そうです(テストされていません):
$('#SearchButton').click(function() {
var $loadMsg = $("#loadingMessage");
if($loadMsg.css('padding-top') !== '6%'){
$loadMsg.css('padding-top', '6%');
}
});
これはもちろん、クリックハンドラーの残りのコードを毎回実行することを前提としています。それ以外の場合は、ハンドラーの実行後にクリックのバインドを解除できます。ヒント:代わりにjQueryのon()およびoff()メソッドを使用してください。