2012-09-18 87 views
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> 

回答

2

.val()用於獲取/設置value屬性,你應該使用。 attr()改爲:

例如, $(this).attr('data-url');

編輯

@Dima建議將訪問HTML5 data-*屬性的正確方法 - 通過使用.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至 訪問數據項。

+0

你贏得了比賽。當時間限制允許我時,我會打勾你。謝謝。 – arame3333

+0

Dima的答案是首選語法。 – nickdos

5

它應該是$(this).data('url'),$(this).data('employeeId')等等。

+0

ahh ..忘了'.data()',+1 – billyonecan

1

嘗試使用該函數的開始

$(this).attr('data-employeeId'); 
+0

另外... data()方法從jQuery 1.4.3開始:http://api.jquery.com/data/#data-html5 – Stphane

+0

「To以字符串形式檢索值的屬性,而不嘗試轉換它,請使用attr()方法「 – Stphane

0

緩存的$(本)。單擊使你的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'); 
    ... 

}); 
0

使用$(這).attr(密鑰)來代替$(本).VAL(鍵)。

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

,而不是

$(this).val('data-url');