0

私のMVCプロジェクトには、このエディターテンプレートがあります。ポップアップウィンドウのように、IEDeveloperToolsでデバッグできません。他のブラウザにアクセスできません。したがって、私のjqueryは、url、employeeId、およびbusinessUnitIdの値を取得していません。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.Models.BusinessUnitSelected>" %>

<tr>
    <td><%: Model.BusinessUnit.BusinessUnitName %></td>
    <td>

    <%: Html.CheckBoxFor( 
            x => x.Selected,
            new RouteValueDictionary 
            { 
                { "data-url", Url.Action("AddBusinessUnitForEmployee", "DataService") }, 
                { "data-employeeId", Model.EmployeeId }, 
                { "data-businessUnitId", Model.BusinessUnit.BusinessUnitId } 
            } 

       ) %> 

    </td>
</tr>
<script type="text/javascript">
    $(document).ready(function () {
        $('tr input[type="checkbox"]').click(function () {
            var elementId = $(this).attr('id');
            alert("elementId = " + elementId);
            var url = $(this).val('data-url');
            alert("url = " + url);
            var employeeId = $(this).val('data-employeeId');
            alert("employeeId = " + employeeId);
            var businessUnitId = $(this).val('data-businessUnitId');
            alert("businessunitId = " + businessUnitId);
            var selectedFlag = $(this).is(':checked');
            alert("selectedFlag = " + selectedFlag);

            dataService.saveSelection(
            employeeId,
            businessUnitId,
            selectedFlag,
            elementId,
            SavedSetting,
            url
        );
        });
    }); 
</script>
4

5 に答える 5

5

$(this).data('url')などです$(this).data('employeeId')

于 2012-09-18T07:58:30.920 に答える
2

.val()valueを使用して属性を取得/設定する場合は、 を使用する必要があります。attr()代わりは:

例えば。$(this).attr('data-url');

編集

@Dima HTML5data-*属性にアクセスする正しい方法を提案します.data()$(this).data('url');

注:属性内の単語はハイフンで囲む必要data-があります。そうしないと、使用時に値を読み取るのに問題が生じ.data()ます。下記参照:-

<input type="text" data-employeeId="1" />

console.log($('input[type="text"]').data('employeeId')); // (undefined!)

これは、$('input[type="text"]').data('employeeId')が を読み込もうとしているからですdata-employee-id。後者を使用すると、.data('employeeId')またはを使用してデータにアクセスできます.data('employee-id')

すべての data-* 名は、W3C 規則を使用して、jQuery データ オブジェクトの camelCase に格納されます。

したがって、data-caMEL-case はデータ オブジェクトの camelCase プロパティになり、.data("camelCase") を使用してアクセスする必要があります。多くの人が代わりに .data("camel-case") を使用するため、これも camelCase に変換しますが、camel-case という名前のデータ項目が見つからない場合に限り、最初の形式を使用する方が高速です。data = jQuery.data(elem) のようなコードを使用してデータ オブジェクト全体を取得する場合は、data.camelCase を使用してデータ項目にアクセスする必要があります。

于 2012-09-18T07:58:17.673 に答える
1

使ってみて

$(this).attr('data-employeeId');
于 2012-09-18T07:58:32.667 に答える
0

$(this).val(key) の代わりに $(this).attr(key) を使用します。

$(this).attr("data-url");

それ以外の

$(this).val('data-url');
于 2012-09-18T08:01:07.300 に答える
0

関数 .click の先頭にある $(this) をキャッシュして、JavaScript がより高速に動作するようにします。$this = $(this) を試してから、$(this) の代わりに $this を使用してください。

$('tr input[type="checkbox"]').click(function () {
  var $this = $(this),
      url = $(this).val('data-url'); // Wrong
      url = $this.attr('data-url'); // Or
      url = $this.data('url');
  ...

});
于 2012-09-18T07:58:43.660 に答える