我正在尝试从href调用javascript函数。该函数有一个参数,将由eval函数检索。但是会发生一些错误。
脚本:
function rate(id) {
// do something
}
将调用该函数的标记:
<a href="javascript:rate(" + <%#Eval("ID")%> + ")" >rate</a>
我错过了什么?
答案 0 :(得分:6)
你不应该这样做,但你目前面临的问题可能是你的引用/连接。
如果<%#Eval("ID")%>
只生成一个INT,那么这应该有效:
<a href="javascript:rate( <%#Eval("ID")%> )" >rate</a>
如果是字符串,
<a href="javascript:rate( '<%#Eval("ID")%>' )" >rate</a>
应该为你做,虽然你需要处理<%#Eval("ID")%>
生成任何单引号的情况。
课程:
我说你不应该这样做,因为javascript伪协议(javascript:
)已经不存在且不合适。在最坏的情况下,您应该使用返回false的onclick
。理想情况下,您将以编程方式分配事件并阻止事件对象的默认操作。
答案 1 :(得分:4)
您不应该使用" + + "
,因为它只会被替换为数字:
<a href="javascript:rate(<%#Eval("ID")%>)">rate</a>
答案 2 :(得分:3)
为什么称它为href?您只需创建一个按钮并将其设置为链接即可。那会更容易
<button id = "myButton" onclick = "rate(<%#Eval("ID")%>)" >rate</button>
#myButton
{
border: none;
padding: none;
background-color: transparent;
}
答案 3 :(得分:2)
我认为根本不需要使用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和速率都可以在顶级范围内使用。