【问题标题】:For condition running only once when calling JS File调用 JS 文件时只运行一次的条件
【发布时间】:2015-09-04 18:07:12
【问题描述】:

我正在从 c# 代码运行 Javascript。

  for(int i=0;i<=2;i++)
   {
        Page.ClientScript.RegisterStartupScript(GetType(), "a", "foo("hello")", true);
   }

Js 文件

Function foo(a){
alert(a);
//some other logic
}

这里的问题是,当我调试代码时,我可以看到循环运行了 3 次,但警报只出现了一次。

为什么只出现一次?我该如何解决这个问题?

【问题讨论】:

  • 你需要注册不同的名字。
  • @SLaks 当我尝试使用此代码时,它根本无法运行。你能告诉我我应该如何使用不同的名字运行吗? Page.ClientScript.RegisterStartupScript(GetType(), "("+i+")", "foo(" + i + ")", true);
  • 检查生成的源。但这可能不是一个合法的名字。
  • @SLaks 我不明白你的意思。你能正确解释或举个例子吗

标签: javascript c# jquery asp.net


【解决方案1】:

您正在使用相同的密钥注册启动脚本 3 次,来自 MSDN:

启动脚本由其键和类型唯一标识。 具有相同键和类型的脚本被认为是重复的。只有一个 可以在页面中注册具有给定类型和密钥对的脚本。 尝试注册已注册的脚本不会 创建脚本的副本。

启动脚本本身只会运行一次。

例如,看看当你这样做时会发生什么:

for(int i = 0; i <= 2; i++)
{
     Page.ClientScript.RegisterStartupScript(GetType(), "a" + i, "foo(\"hello\")", true);
}

【讨论】:

  • 这个函数现在根本没有被调用。
  • 不,您编辑的版本也不会调用该函数一次。
【解决方案2】:

@Lloyd 所说的是正确的,+ i 是制作唯一配对所必需的。

试试这个:

for (int i = 0; i <= 2; i++)
{
    Page.ClientScript.RegisterStartupScript(GetType(), "a"+ i, "foo('hello');", true);
}

您在 javascript 函数末尾缺少分号。

这就是@Lloyd 建议的结果

<script type="text/javascript">
//<![CDATA[
foo("hello")foo("hello")foo("hello")//]]>
</script>

这就是你想要的:

<script type="text/javascript">
//<![CDATA[
foo('hello');foo('hello');foo('hello');//]]>
</script>
</form>

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2020-12-20
    • 1970-01-01
    • 2018-10-13
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多