#javascript #jquery #model-view-controller #asp.net-mvc-2 #jscript.net
#javascript #jquery #model-view-controller #asp.net-mvc-2 #jscript.net
Вопрос:
В принципе, у меня есть выпадающие списки для сборки ПК как такового, на мой взгляд (MVC 2), для всех вас, людей, не являющихся MVC, приведенный ниже код встроенного представления выдаст стандартный выпадающий список (ы):
<%: Html.DropDownList("CPUList", new SelectList((IEnumerable)Model.processor, "ProductID","Name")) %>
<%: Html.DropDownList("MBList", new SelectList((IEnumerable)Model.motherboard, "ProductID","Name")) %>
Я не хочу возвращаться к Ajax-запросу каждый раз, когда я хочу получить цену для любого варианта в выпадающем списке (ах), поскольку у меня есть только ProductID в качестве значения и название детали, но не цена. Я думал о том, чтобы сделать что-то вроде приведенного ниже, чтобы я мог иметь все ProductID и соответствующую цену в строках таблицы в скрытой таблице. Итак, ProductID в одной ячейке строки и price в ячейке рядом с ней. Теперь мне нужен JavaScript, который будет использовать значение (ProductID) любой выбранной опции в выпадающем списке, чтобы найти цену за нее в скрытой таблице, используя ProductID в таблице в качестве ключа, и получить цену из следующей ячейки в той же строке. Сделайте это для всех выбранных параметров в выпадающих списках, сложите их и отобразите итог. Можно ли это сделать? Есть ли у HTML-таблицы индекс, к которому можно подключиться с помощью Jscript?
<table border="1" id="ProcessorPrices" style="visibility: none;">
<% foreach (var itm in Model.processor)
{ %>
<tr>
<td id="cpuprice"><%: itm.ListPrice %></td>
<td id="cpupid"><%: itm.ProductID %></td>
</tr>
<% } %>
</table>
Спасибо..
Ответ №1:
jQuery может подключаться к индексу строк таблицы с помощью n-го дочернего селектора, но, возможно, изменение вашего дизайна упростило бы поиск цен:
<table border="1" id="ProcessorPrices" style="visibility: none;">
<% foreach (var itm in Model.processor)
{ %>
<tr>
<td id="cpupid_<%: itm.ProductID %>"><%: itm.ListPrice %></td>
</tr>
<% } %>
</table>
Затем вы могли бы посмотреть цену, используя что-то вроде:
var allSelects = $("select");
allSelects.change(function() {
var total = 0;
allSelects.filter("[selectedIndex!='0']").each(function() {
total = parseFloat($("#cpupid_" $(this).val()).text());
});
$("#resultBox").html(total);
});
Комментарии:
1. Попробовал, но он возвращает NaN (не число) вместо общего числа. Кажется, что parseFloat не может преобразовать $ (this).val()).text() в float или int с помощью parseInt?
2. Хм, хорошо — извините, я не могу проверить это прямо сейчас, но попробуйте использовать .html () вместо .text () — если это не поможет, я вернусь к вам с чем-нибудь, что определенно сработает в следующий раз 🙂