显然我做错了什么。我从来没有能够让.click()工作,但其他jQuery调用工作正常。
我有以下Javascript功能:
function showParamsFor(divID) {
//Code here works when the function is called through onclick attribute
}
然后,我基本上有以下情况:
int index = 0;
foreach (var op in Model.Operations)
{
<div id="param_container[@(index)]"
<a id="show_params[@(index)]" href="#">
Edit Parameters
</a>
</div>
index++;
}
int total = index;
<script type="text/javascript" src="~/Scripts/jquery-1.6.2.min.js"></script>
for (int i = 0; i < total; i++)
{
<script type="text/javascript">
$(document).ready($('#show_params[@(i)]').click(function () {
showParamsFor('#param_container[@(i)]');
});
</script>
}
对于我的生活,我似乎无法让它发挥作用。除了.click(),我尝试使用以下方法:
.live('click', function())
.bind('click', function())
我尝试删除$(document).ready并在每个场景中添加回来,但点击链接时没有任何反应。
我已经仔细检查了我的id名称,甚至尝试使用类名作为链接(.show_params [@(i)])而不是id。我在这做错了什么?
修改
我正在使用循环,因为我有这些链接的动态列表。我需要在创建ALL之后将click事件绑定到每个事件,因为每个链接都需要引用其他每个链接。
答案 0 :(得分:2)
我将为a标记添加一个css类,以便我可以将它用于我的jQuery选择器来绑定点击功能。
foreach (var op in Model.Operations)
{
<div id="param_container[@(ViewBag.Index)]"
<a id="show_params[@(ViewBag.index)]" href="#" class="thatClass">
Edit Parameters
</a>
</div>
ViewBag.Index++;
}
您的脚本应该是
$(function(){
$(".thatClass").click(function(e){
e.preventDefault()'; //if you want to prevent default behaviour
var item=$(this);
alert(item.attr("id");
alert(item.parent().attr("id");
});
});
这应该有效
不确定为什么使用ViewBag项目来提供元素的ID! 。
如果您有一个ID(其他一些属性为您提供唯一值,您应该考虑使用它(假设您有一个ID
属性,该属性对集合中的每个项目都有唯一值)
foreach (var op in Model.Operations)
{
<div id="param_container-@op.ID"
<a id="show_params-@op.ID" href="#" class="thatClass">
Edit Parameters
</a>
</div>
}
恕我直言,上面的代码看起来比使用ViewBag的代码更清晰
答案 1 :(得分:0)
仍然不明白,为什么你想在这里使用自定义循环。 Jquery代码就足够了。 首先,添加您的元素。然后,您准备好的文档应如下所示:
$(document).ready(function() {
$('a[id^=link]').live('click', function(data) {
alert($('#links').children().index(this));
});
});
<强> UPD 强> 小样本在这里: http://jsbin.com/ahafel/2
答案 2 :(得分:0)
感谢您的回复,但我已经找到了问题。
我正在将'#param_container [@(i)]'传递给我的showParamsFor函数,当时我应该将'param_container [@(i)]'传递给它。没有哈希标记。
一个更重要的问题......我的id中的括号未被jQuery识别。我读到你可以在括号前使用\\作为逃避字符,但自然......这对我不起作用。我将我的id从'param_container [@(i)]'改为'param_container - @(i)'。
一切似乎都很好。这是我的最终剧本:
<script type="text/javascript" src="~/Scripts/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
for (var i = 0; i < total; i++)
{
$(document).ready(function() {
$('#show_params-'+i).live('click', function (data) {
showParamsFor('param_container-'+i);
});
});
}
</script>