0

在我的 MVC 项目中,我有这个编辑器模板。我无法在 IE 开发人员工具中调试它,因为它在弹出窗口中。我无法访问其他浏览器。所以我的 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')or访问数据.data('employee-id')

使用 W3C 规则,所有 data-* 名称都存储在 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

在函数 .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 回答
0

使用 $(this).attr(key) 而不是 $(this).val(key)。

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

代替

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