我在视图中动态创建一个链接来调用控制器的方法:
$(document).ready(function(){
var data="SomeDataToController";
var link=document.createElement('a');
var linkText=document.createTextNode("Delete");
link.appendChild(linkText);
link.title="Title text";
link.href=HelloWorld(ee);
document.getElementById("imageBox1").
appendChild(link);
}
function HelloWorld(data){
alert(data);}
如果用户点击链接“删除”,如何调用方法HelloWorld(数据)?
我试图在“onclick”事件中调用代码,但是在构建标记时会立即调用HelloWorld()函数。但是,我想在用户点击链接时拨打电话。
答案 0 :(得分:2)
您正在尝试附加活动。您需要使用addEventListener
或attachEvent
,而不是直接将功能分配给href
。
if (window.addEventListener) {
link.addEventListener('click', HelloWorld(ee), false);
} else if (window.attachEvent) {
link.attachEvent('onclick', HelloWorld(ee));
}
答案 1 :(得分:1)
使用jQuery的.on
命令,但将其用作委托。这也是在加载页面后处理对象的创建。
例如,您可以在.on
级别附加<body>
并说明,每次点击<a>
类“clickme”时,它都会执行您的方法。
这样的事情:
$(body).on("click", ".clickMe", function (e) {
e.preventDefault();
HelloWorld('my value taken from data- attribute or whatever');
});
答案 2 :(得分:1)
这里有两个主要问题:您不应该尝试通过将href设置为某个东西来设置onclick处理程序,并且在分配时实际调用HelloWorld()
函数,所以基本上你是&#39 ;重新分配函数返回到href。
您应该使用addEventListener
附加在点击时调用HelloWorld()
的函数:
link.addEventListener('click', function() { HelloWorld(data); })
如果您需要在版本9之前支持Internet Explorer,您还需要有条件,并使用attachEvent()
。
答案 3 :(得分:1)
如果您想在用户点击元素时执行JavaScript功能,可以使用类似的功能。
$(document).ready(function () {
var data = "SomeDataToController";
var link = document.createElement('a');
var linkText = document.createTextNode("Delete");
link.appendChild(linkText);
link.title = "Delete";
link.onclick = eval(getDeleted);
document.getElementById("imageBox1").appendChild(link);
});
function getDeleted() {
var f = "delete";
Delete(f);
}
function Delete(f) {
alert(f);
}
但是我想使用像这样的jQuery功能。
`
function myHandler(event) {
alert(event.data.foo);
}
$('#imageBox1 a').on("click", {
foo: "bar"
}, myHandler);
`
答案 4 :(得分:0)
$(document).on("click", "a", function(data){
alert(data);
});
答案 5 :(得分:0)
我建议使用jQuery创建动态HTML。
$("#imageBox1").append('<a href="' + javascript:alert(1); + '">' + text + '</a>');