0

我在一个视图上有一些 javascript,可以对我的控制器进行 ajax 调用。我正在遍历数据并正在构建一个表格。我需要做的是为表中的每个项目,使其成为一个超链接,然后当用户单击任何链接时,我想用链接的值填充一个文本框。

到目前为止,我的代码循环遍历 json 数据并构建我的表工作。这是代码片段:

            htmlstring = htmlstring + "<th>VlanId</th><th>Name</th>";
    for(i = 0; i < returnDataFromController.length; i++) {
        //alert(returnDataFromController[i].VlanId);
        htmlstring = htmlstring +  "<tr><td><a href=''>"+returnDataFromController[i].VlanId+"</a></td><td>"+ returnDataFromController[i].Name+"</td></tr>";          
    }
    submitFormHTML = "<input type='text' id='newVlanID' style='width:5em;height:1.5em'/>&nbsp;&nbsp;<button class='btn' id='saveVlan' style='width:10em;height:2em'>Reassign Vlan</button>";
    $('#clientajaxcontainer').html(htmlstring);
    $('#newvlanform').html(submitFormHTML);

为了完成我想做的事情,我需要给每个标签一个唯一的名称还是我可以将它分配给一个类?如果我可以为每个标签分配一个特定的类,那就太好了 - 例如)classX ...然后为classX类型的标签的点击事件编写一个jquery处理程序。这可能吗?感谢您花时间阅读这篇文章。

编辑:

我正在使用 jquery 1.8 版。除了上面的代码之外,我还添加了一些 javascript 来尝试根据点击事件自动填充文本框:

 $('clientajaxcontainer').on("click", "td:first-child a", function(ev) {
  ev.preventDefault();
  $('#newVlanID').val($(this).text());
  });

如果我理解正确, ev.preventDefault() 应该会阻止浏览器将我重定向到另一个页面。但这似乎不起作用。当我单击任何超链接时,它会重新加载当前页面。

4

2 回答 2

1

使用.on()的委托版本并将单击处理程序添加到您的 ajax 容器。

$("#clientajaxcontainer").on("click", "td:first-child a", function(ev) {
    ev.preventDefault();

    $("#newVlanID").val($(this).text());
});

另一个问题的示例,但它非常接近这个解决方案,只是没有链接标签:)

编辑
对于 1.7 以下的 jQuery 版本,您可以使用.delegate()代替

$("#clientajaxcontainer").delegate("td:first-child a", "click", function(ev) {
    ev.preventDefault();

    $("#newVlanID").val($(this).text());
});
于 2012-09-05T19:15:02.767 回答
0

我不会将链接创建为 HTML 字符串,而是将它们创建为 jQuery 元素,因此您可以为它们分配点击侦听器:

var link = $("<a href=#>"+ yourVar +"</a>");
link.click(function(){
  alert("Do something with "+ $(this).html());
  return false;
});
$(yourDomElement).append(link);
于 2012-09-05T19:14:50.427 回答