因此,我在Javascript中使用此功能,每次数据库条目已被使用时,都会在HTML网站上发布警报消息。
现在问题是我只想打印一次,例如使用"覆盖所有条目"按钮而不是每次发送的消息。
每次数据库条目已经被使用时,javascript都有一个与java文件合作的情况(java文件发送" databaseentryexists"对于每个条目),如下所示:
case 'databaseentryexists': AlertFunction("alert-warning"); break;
然后函数本身就像这样:
function AlertFunction(messagetype){
var messagetype = "alert " + messagetype;
jQuery('<div/>', { class: messagetype
}).html('Overwrite button').appendTo("#alertmessage1");
}
在HTML中它看起来像这样:
<div id="alertmessage1"></div>
我怎样才能解决&#34;覆盖&#34;消息只发生一次而不是每个条目?
答案 0 :(得分:1)
你可以有一个变量标志,用于检查你的覆盖信息是否已经添加或不像
var isOverwriteDone = false;
function AlertFunction(messagetype){
if(!isOverwriteDone ){
isOverwriteDone = true;
var messagetype = "alert " + messagetype;
jQuery('<div/>', { class: messagetype
}).html('Overwrite button').appendTo("#alertmessage1");
}
}
答案 1 :(得分:1)
您可以使用闭包:
const AlertFunction = (() => {
let hasBeenCalled = false;
return (messagetype) => {
if (hasBeenCalled) return;
var messagetype = "alert " + messagetype;
hasBeenCalled = true;
jQuery('<div/>', { class: messagetype }).html('Overwrite button').appendTo("#alertmessage1");
}
})()
这样
AlertFunction("123"); // -> "alert 123"
AlertFunction("456"); // -> undefined
请记住,您无法控制调用函数的次数。您可以控制的是函数体执行的次数。无论是简单的布尔标志还是更复杂的底层逻辑。