0

显然我做错了什么。我一直无法让 .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。我在这里做错了什么?

编辑

我正在使用循环,因为我有这些链接的动态列表。我需要在它们全部创建后将点击事件绑定到每个链接,因为每个链接都需要对每个其他链接的引用。

4

3 回答 3

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 的代码更干净

于 2012-07-06T20:29:23.980 回答
0

还是不明白,为什么要在这里使用自定义循环。Jquery 代码在这里就足够了。首先,添加您的元素。然后,您准备好的文档应该如下所示:

        $(document).ready(function() {
            $('a[id^=link]').live('click', function(data) {
                alert($('#links').children().index(this));
            });
        });

UPD 小样本在这里:http: //jsbin.com/ahafel/2

于 2012-07-06T20:47:37.717 回答
0

感谢您的回复,但我已经找到了我的问题。

  1. 当我应该将 'param_container[@(i)]' 传递给它时,我将 '#param_container[@(i)]' 传递给我的 showParamsFor 函数。没有哈希标签。

  2. 一个更重要的问题......我的 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>
于 2012-07-09T14:21:37.010 回答