使用.NET和C#。我正在根据条件从后面的代码中调用Javascript函数。
问题:当变量达到1以上时,我想调用一个单独的JS函数。问题在于,似乎浏览器重置了计数器变量,或者我做错了什么。
这是我第一次尝试这样做
var myFunctionCalls = 0; //To track how many times this function gets called
function TTclubConfirmUw1(){
if(myFunctionCalls < 1){
//Do something here
myFunctionCalls++;
}
else{
//Call another method after the variable reaches 1
// reset myFunctionCalls back to zero (myFunctionCalls = 0;)
}
似乎增量调用有效。正如我已经提醒看到的那样,但是在页面刷新后它并没有保留..这在后面的代码中发生了。
然后我尝试了一个jQuery Cookie。到现在为止遇到了一些错误,但是似乎我也错过了一些东西。附言我也使用了js-cookie插件。
我希望有一个每次调用某个函数时都会增加的计数器。将该计数器用于条件逻辑。
这里是我所拥有的:
var myFuncCalls = 0;
function ContactUW() {
var cookies = Cookies.set("count", "myFuncCalls", {expires: 1} );
if (cookies > 0) {
alert(Cookies.get('count')+ "GT");
} else {
alert(Cookies.get('count') + "LT");
myFuncCalls++;
}
}
这只是为了测试,看看我能否使它工作。永远不会..带回“ myFuncCallsLT”当我想要的是值且最终增加的值myFuncCalls
编辑---------------------------------------------- -- 在获得以下帮助之后,我想我也应该发布获得的帮助。
实际上,这确实将我要查找的值分配给了该cookie。我找到了另一个可用的解决方案(我在下面发布,但可以稍作调整就可以使用它)
我对其进行了测试,以确认它在页面刷新后是否有效。唯一的奇怪是++增量运算符将无法正常工作。因此,我已经按照您的方式向FunctionCalls添加了。
var FunctionCalls = 0;
window.onload = function TestTwo() {
if (Cookies.get("count") > 0) {
alert(Cookies.get('count') + "LT");
} else {
alert(Cookies.get('count') + "GT");
FunctionCalls = FunctionCalls + 1;
Cookies.set("count", FunctionCalls);
}
}
答案 0 :(得分:1)
您将cookie值设置为“ myFuncCalls”字符串,而不是实际设置该值,您需要将其更改为以下值(即,删除myFuncCalls周围的双引号):
var myFuncCalls = 0;
function ContactUW() {
var cookies = Cookies.set("count", myFuncCalls, {expires: 1} );
if (cookies > 0) {
alert(Cookies.get('count')+ "GT");
} else {
alert(Cookies.get('count') + "LT");
myFuncCalls++;
}
}
答案 1 :(得分:0)
因此,这不能完全回答问题。具体使用JQuery cookie方法。但是,我确实发现并能够完成我想要做的事情。
回顾:我需要一种方法来有条件地确定在后面的代码中调用哪个JS函数。我试过柜台,傻瓜。甚至被会话变量搞糊涂了。没事。它要么假定它是分配的值0,要么假定它是递增的,则在刷新页面时它永远不会保持新递增的值。
因此,我使用了hiddenField .NET变量。
<asp:HiddenField ID="hf2" runat="server" ClientIDMode="Static" />
我在后面的代码中调用此方法。
public void TTclubMethod()
{
//send JS message to user. Contact underwriter first.
bool contactUW = false;
// determine what value #hf2 holds to determine what JS func to call
if (hf2.Value == String.Empty)
{
ClientScript.RegisterStartupScript(GetType(), "hwa", "ContactUW();", true);
string var = hf2.Value.ToString(); //Testing
MessageBox.Show(var); //Testing
}
else
{
//Create blank template message and update DB.
ClientScript.RegisterStartupScript(GetType(), "hwa", "TTclubConfirmUw();", true);
}
}
初始值始终为空白。调用第一个JS函数
function ContactUW() {
var close = bootbox.alert({
message: '<p class="text-center"><b>This is a TTCLUB policy. Please contact the underwriter about the renewal process. </b></p>',
size: "large",
closeButton: true
});
var hf2 = document.getElementById("hf2");
hf2.value = 1;
}
然后将隐藏字段值设置为1。下次我调用该C#方法时,它在逻辑上将移至下一个要调用的JS函数。
"TTclubConfirmUw();"
根据用户选择的内容,确定我将隐藏字段值保持为1还是再次将其重置为空。
我敢肯定有更多优雅的方法可以做到这一点,但这解决了这个问题并且一直有效。也许这会帮助别人。