【问题标题】:using a href to call javascript function with parameter使用href调用带参数的javascript函数
【发布时间】:2011-10-11 05:05:19
【问题描述】:

我正在尝试从 href 调用 javascript 函数。该函数有一个参数,该参数将由 eval 函数检索。但是会出现一些错误。

脚本:

function rate(id) {

            // do something
        }

将调用函数的标签:

<a href="javascript:rate(" + <%#Eval("ID")%> + ")" >rate</a>

我错过了什么?

【问题讨论】:

  • 什么错误?你为什么向我们展示生成 JS 而不是生成的 JS 的服务器端代码?你为什么不用progressive enhancement
  • @JAAulde 脚本确实执行了。如果它是 rate 它执行。

标签: javascript asp.net eval href


【解决方案1】:

我认为根本不需要使用 eval()。像这样的引号中的代码是在顶级范围内评估的。如果您确保在顶级范围内定义了 rate 和 ID,那么它可以在没有 eval() 的情况下使用此 HTML:

<a href="#" onclick="rate(ID);">rate</a>

还有这段代码:

var ID = 3;

function rate(id) {
    alert(id);
    return(false);
}

你可以在这里看到它的工作原理:http://jsfiddle.net/jfriend00/bqqpM/。在没有 eval 的情况下完成这项工作的诀窍是确保 ID 和 rate 在顶级范围内都可用。

【讨论】:

  • 我正在使用 eval,因为 a 标签在 repeater 内。并指定这是哪一行,我必须使用 eval 。
  • 好的,下次有代表性的实际页面 HTML 样本会更好,然后我们就会知道您要解决的总体问题是什么。
【解决方案2】:

您不应该这样做,但您目前面临的问题可能是您的引用/连接。

如果&lt;%#Eval("ID")%&gt; 只是产生一个 INT,这应该可以工作:

<a href="javascript:rate( <%#Eval("ID")%> )" >rate</a>

如果是字符串,

<a href="javascript:rate( '<%#Eval("ID")%>' )" >rate</a>

应该为你做,虽然你需要处理 &lt;%#Eval("ID")%&gt; 产生任何带有单引号的东西的情况。

一课:

我说你不​​应该这样做,因为 javascript 伪协议 (javascript:) 已失效且不正确。在最坏的情况下,您应该使用返回 false 的 onclick。理想情况下,您应该以编程方式分配事件并阻止事件对象的默认操作。

【讨论】:

  • 我想以编程方式进行,但我面临的问题是 rate 函数将调用 jquery function (plugin for dialog window) 。那么,您还有其他建议吗?
  • 您能否解释一下,或链接到解释为什么您在此处推荐的“最佳实践”实际上更胜一筹?
【解决方案3】:

为什么称它为href?您可以制作一个按钮并将其设置为链接的样式。这样会容易很多

<button id = "myButton" onclick = "rate(<%#Eval("ID")%>)" >rate</button>

#myButton
{
  border: none;
  padding: none;
  background-color: transparent;
}

【讨论】:

    【解决方案4】:

    你不应该使用" + + ",因为它只会被一个数字代替:

    <a href="javascript:rate(<%#Eval("ID")%>)">rate</a>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多