1

次のコードでデータ属性 (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 になります。なぜでしょうか?

4

3 に答える 3

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属性で。

于 2013-07-10T07:23:51.970 に答える
2

これ

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

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

する必要があります

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

データ属性には大文字を含めないでください。詳細を読むためのリンク

より良い方法..

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

  makeRowEditable(row, editUrl);
  e.preventDefault();
});
于 2013-07-10T07:21:56.880 に答える
0

削除'して、次のようにすることもできます

var editUrl = $(this).attr("data-scd-editUrl");
于 2013-07-10T07:22:16.997 に答える