我在尝试在外部组合框更改事件上获取级联组合框时遇到问题。您可以在表中添加和删除行,以便可以有任意数量的行。每行内有2个组合框。 1表示客户,1表示联系。我在客户组合框中触发了一个更改事件,该事件将为该客户提供有效的联系人。下面是表格的html
<tr class="ClassAttendee">
<td>
<select class="Customers valid" id="Attendees_0__Customers"
name="Attendees[0].Customers">
<option value="1517">Woodstock</option>
<option value="1518">Woolwich</option>
<option value="1519">Yarmouth</option>
<option value="1520">York</option>
</select>
</td>
<td>
<select class="Contact">
<option value="">Choose Attendee...</option>
</select>
</td>
<td>
<input data-val="true" data-val-required="The Attended field is required."
id="Attendees_0__Attended" name="Attendees[0].Attended" type="checkbox"
value="true"><input name="Attendees[0].Attended" type="hidden" value="false">
<span class="field-validation-valid" data-valmsg-for="nestedObject.Attended" data
-valmsg-replace="true"></span>
</td>
<td>
<input class="FeePaid" data-val="true" data-val-required="The Fee Paid field is
required." id="Attendees_0__FeePaid" name="Attendees[0].FeePaid" type="checkbox"
value="true"><input name="Attendees[0].FeePaid" type="hidden" value="false">
<span class="field-validation-valid" data-valmsg-for="nestedObject.FeePaid" data
-valmsg-replace="true"></span>
</td>
<td>
<input class="CheckNumber" id="Attendees_0__CheckNumber"
name="Attendees[0].CheckNumber" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="nestedObject.CheckNumber"
data-valmsg-replace="true"></span>
</td>
<td>
<input class="mark-for-delete" data-val="true" data-val-required="The Delete field
is required." id="Attendees_0__Delete" name="Attendees[0].Delete" type="hidden"
value="False">
<a href="#"
onclick="javascript:removeNestedForm(this,'tr.ClassAttendee','input.mark-for
-delete');return false;">Remove</a>
</td>
</tr>
每行看起来像前两个单元格包含下拉列表。第一个是Customer,第二个是Contacts。如果我只使用$(“Contact”)的选择器,我可以使用正确的选项更新组合框,所以我知道这有效,但我需要指定行,因为当我只使用该选择器时,所有行都会更新。
?下面是我正在尝试使用的JQuery
$('.Customers').change(function (e) {
var selectedCustomer = $(this).val();
if (selectedCustomer != null && selectedCustomer != '') {
$.getJSON('@Url.Action("GetAllSelectedCustomer", "CustomerEmails")', { id: selectedCustomer }, function (contacts) {
var contactSelect = $(this).parent().next().children(".Contact");
contactSelect.empty();
$.each(contacts, function (index, contact) {
contactSelect.append($('<option/>', {
value: contact.ID,
text: contact.Name
}));
});
});
}
});
我遇到问题的特色是
var contactSelect = $(this).parent().next().children(".Contact");
如果我使用选择器首先选择客户下拉框而不是使用此选项,然后使用线路的其余部分我可以选择联系人下拉列表。我不明白为什么这不起作用,如果我不能使用这个对象,我也没有想法如何在我正在处理的行上选择特定的下拉列表。
任何想法都将不胜感激。
答案 0 :(得分:2)
这是一个经典问题:this
指的是函数调用的上下文,对于大多数回调来说都是window
。
解决方案:
if (selectedCustomer != null && selectedCustomer != '') {
var that = this;
$.getJSON('@Url.Action("GetAllSelectedCustomer", "CustomerEmails")', { id: selectedCustomer }, function (contacts) {
var contactSelect = $(that).parent().next().children(".Contact");
答案 1 :(得分:0)
尝试使用闭包:
$('.Customers').change(function (e) {
var selectedCustomer = $(this).val();
if (selectedCustomer != null && selectedCustomer != '') {
(function(el) {
$.getJSON('@Url.Action("GetAllSelectedCustomer", "CustomerEmails")', { id: selectedCustomer }, function (contacts) {
var contactSelect = $(el).parent().next().children(".Contact");
contactSelect.empty();
$.each(contacts, function (index, contact) {
contactSelect.append($('<option/>', {
value: contact.ID,
text: contact.Name
}));
});
});
})(this);
}
});