我没有得到我的数据属性的价值

时间:2013-07-10 07:20:27

标签: jquery asp.net-mvc

我无法在以下代码中获取数据属性(data-scd-editUrl)的值;

@foreach (var item in Model)
{
    <tr data-pkey="@item.TradeId">
         <td style="text-align:left;vertical-align:top;height:20px;">
        <div style="width:100%;height:100%;overflow:hidden;">
            @Html.DisplayFor(modelItem => item.TradeName)
            </div>
        </td>
        <td class="rowControl hidden" style="text-align:left;vertical-align:top;height:20px;">
         <div style="width:100%;height:100%;overflow:hidden;">
            <img src="@Url.Content("~/Images/Pencil.ico")" style="height:15px;width:15px" title="edit" alt="edit" class="makeRowEditable"
                data-scd-editUrl="@Url.Action("Edit", new { id = item.TradeId})"/> |
            <img src="@Url.Content("~/Images/icon-delete.gif")" style="height:15px;width:15px" title="delete" alt="delete" class="deleteRow"
                data-scd-editUrl="@Url.Action("Delete", new { id = item.TradeId})"/>            
         </div>
        </td>
    </tr>
}

Jquery是;

gridContext.delegate('.makeRowEditable', 'click', function (e) {
    var editUrl = $('this').data("scd-editUrl");
    var row = $(this).parents('tr');
    makeRowEditable(row, editUrl);
    e.preventDefault();
});

使用委托是因为此代码是网格的一行,并通过Ajax动态重新加载新页面。 我在上面的代码中放了一个断点,editUrl为null。 为什么会这样?

3 个答案:

答案 0 :(得分:5)

HTML5 data- *属性的命名约定如下:

data-scd-edit-url

然后:

$(this).data('scd-edit-url')

如果您不想遵守约定,则无法使用.data()方法。改为使用.attr()方法:

$(this).attr('data-scd-editUrl')

另请注意,$('this')显然应为$(this)


更新:

正如评论部分所指出的,您还可以使用以下选择器:

$(this).data('scdEditUrl')

使用data-scd-editUrl属性。

答案 1 :(得分:2)

  .. data-scd-editurl=...
              //--^---here  

  >>$('this')
  var editUrl = $('this').data("scd-editurl"); //here

应该是

  >>$(this)
   var editUrl = $(this).data("scd-editurl"); //here

数据属性不应包含任何upperCase字母.. link以阅读更多相关信息

更好的方式..

gridContext.delegate('.makeRowEditable', 'click', function (e) {
  var $this=$(this),
      editUrl = $this.data("scd-editurl"),
      row = $this.parents('tr');

  makeRowEditable(row, editUrl);
  e.preventDefault();
});

答案 2 :(得分:0)

删除',您也可以将其设为

var editUrl = $(this).attr("data-scd-editUrl");