2012-12-10 104 views
0

我的應用程序允許您跟蹤商店數據庫中的訂單。該數據庫包含用於notes的弱實體,該實體附加到orderID。我希望允許用戶同時對多個訂單應用相同的「備註」,但notes表中的某些字段取決於銷售的location。換句話說,如果所有的銷售地點都是相同的,你只能被允許應用相同的註釋。檢查檢查行中的值是否相同

簡體查閱:

@using (Html.BeginForm("Create", "Note", FormMethod.Get, new { name = "editForm" })) 
{ 
    <table id="DataTable"> 
     <tr> 
      <th> 
       <input type="button" value="Edit" onclick="checkboxValidation()"/> 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.OrderID) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.location) 
      </th> 
     </tr> 
@foreach (var item in Model) 
{ 
    <tr > 
     <td> 
      <input type="checkbox" name="ids" value="@item.orderID" /> 
     </td> 
    <td> 
     @Html.ActionLink(item.OrderID.ToString(), "Details", "Search", new { orderID = item.orderID.ToString() }, null) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.location) 
    </td> 
    </tr> 
} 
</table> 

checkboxValidation()是一個JavaScript函數,我寫檢查,如果至少1複選框被選中。我將如何添加一張支票以確保所有已檢查的行上的所有位置都相同?這甚至有可能嗎?謝謝

編輯:我錯過了一個細節。當點擊編輯按鈕時,如果檢查成功,它會提交表單,從而調出notes編輯器。

回答

1

應該使用相當簡單的JQuery:

// find all the checked rows 
var checkedItems = $("#DataTable").find("tr td input[type=checkbox]"); 

// construct a locations array for all checked items 
var locations = []; 
checkedItems.each(function(index, element) { 
    if ($(element).is(":checked")) { 
     locations.push($(this).closest("td").next("td").next("td").text().trim()); 
    } 
}); 

// confirm each location is the same 
var valid = true; 
locations.each(function(index, element) { 
    if (index > 0 && locations[index-1] != element) { 
     valid = false; 
     return; 
    } 
}); 

一個你可能想要做更多的事情,就是添加一些數據標籤的trtd元素,讓你可以寫更強大的選擇贏得」 t與小UI重新排列(如tr[data-role=check]tr[data-role=location]等)分開。


(使用JQuery closest和和JQuery each。)

+0

似乎是一個簡單的解決方案。我不是JS的主人,所以也許你可以通過解釋一些事情來招待我?我有理解'push','nearest'和'function(i,e)'的問題。我假設推送只是將該項目添加到「位置」。究竟是什麼決定了如何「關閉」一個元素對另一個元素?謝謝 – Jeff

+0

@Jeff是的,'push'將一個項目添加到數組中。 '最近'獲取匹配選擇器的第一個元素,向上到DOM樹(即,我在這裏使用它來獲取屬於複選框的'td'元素)。 'function(i,e)'是'each'的迭代函數 - 當然你可以命名'i'和'e',但它們是當前項目的索引和項目本身。 – McGarnagle

+0

感謝您的解釋。看來,Visual Studio不喜歡這行'if(element.is(「:checked」)){'。給出的錯誤信息是「Microsoft JScript運行時錯誤:對象不支持此屬性或方法」。調試時,這個問題似乎是用'.is'。我正在使用JS 1.8.0 – Jeff