Javascript 无法处理 asp.net MVC 中多 select 下拉列表的 onchange 事件
Javascript not working with onchange event of multi select dropdownlist in asp.net MVC
我在 ASP.NET MVC 视图中有以下 Razor 代码
<div id="rolesValues" class="case-assignment-hide">
@Html.DropDownList("ddlRoleValues", new SelectList(@Model.Roles, "Key", "Value"), new {@id= "ddlRoleValues", @class = "form-control case-assignment-rule-use-values", multiple = "multiple" })
<span class="field-validation-valid help-block" data-valmsg-replace="true"></span>
</div>
下面是我的 javascript 以捕获上面 dropdownlist
的更改事件,我将其放入 $(document).ready(function ()
$("#ddlRoleValues").on("change", function () {
alert('I got the hit');
});
我注意到只要 dropdownlist
项的选择发生变化,此事件就不会被触发。
以下是在浏览器中呈现的HTML
<div class="col-sm-4 case-assignment-rule-value-selection">
<div class="select2-container select2-container-multi form-control case-assignment-rule-values" id="s2id_ddlRoleValues">
<ul class="select2-choices">
<li class="select2-search-choice">
<div>Manager</div>
<a href="#" onclick="return false;" class="select2-search-choice-close" tabindex="-1"></a>
</li>
<li class="select2-search-field">
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" id="s2id_autogen1" style="width: 34px;">
</li>
</ul>
</div>
<select class="form-control case-assignment-rule-values select2-offscreen" id="CaseAssignmentRules[0].RuleValues" multiple="multiple" name="CaseAssignmentRules[0].RuleValues" tabindex="-1" data-val="true" data-val-required="This field is required.">
<option value="aae">Manager</option>
<option value="aad">Manager Supervisor</option>
<option value="ab1">Accommodations Manager</option>
<option value="ab0">Service Representative</option>
<option value="84d">demo</option>
<option value="ab2">Employee</option>
<option value="ab4">Human Resource</option>
<option value="aaf">Case Manager</option>
<option value="ab3">Supervisor</option>
</select>
<span class="field-validation-valid help-block" data-valmsg-replace="true" data-valmsg-for="CaseAssignmentRules[0].RuleValues"></span>
</div>
我是不是漏掉了什么??
// Try using the class instead of id
$(document).on("change", ".case-assignment-rule-values", function () {
alert('I got the hit');
});
您的 MVC 代码:
<div id="rolesValues" class="case-assignment-hide">
@Html.DropDownList("ddlRoleValues", new SelectList(@Model.Roles, "Key", "Value"), new {@id= "ddlRoleValues", @class = "form-control case-assignment-rule-use-values", multiple = "multiple" })
<span class="field-validation-valid help-block" data-valmsg-replace="true"></span>
</div>
应该生成 id 为 rolesValues
和 ddlRoleValues
的 2 个元素。但是,在您生成的 HTML.
中找不到这些 ID
因此,根据此信息,您的问题无法回答,因为再多的代码也无法select这些元素中的任何一个,因为它们不存在。
正如 Erik Philip 所说,我的代码确实生成了自动 ID,但我们可以在 class 而不是 Id 上应用事件。这是我如何实现的。我在 $(document).ready(function ()
中添加了以下行
$(this).parent().siblings('.case-assignment-rule-value-selection').find('select.case-assignment-rule-values').select2().on("change", function () {
listToFilter(this);
);
var listToFilter = function (e) {
var selectedLength = $(e).select2('data');
}
已将事件传递给 function
,它工作正常。
我在 ASP.NET MVC 视图中有以下 Razor 代码
<div id="rolesValues" class="case-assignment-hide">
@Html.DropDownList("ddlRoleValues", new SelectList(@Model.Roles, "Key", "Value"), new {@id= "ddlRoleValues", @class = "form-control case-assignment-rule-use-values", multiple = "multiple" })
<span class="field-validation-valid help-block" data-valmsg-replace="true"></span>
</div>
下面是我的 javascript 以捕获上面 dropdownlist
的更改事件,我将其放入 $(document).ready(function ()
$("#ddlRoleValues").on("change", function () {
alert('I got the hit');
});
我注意到只要 dropdownlist
项的选择发生变化,此事件就不会被触发。
以下是在浏览器中呈现的HTML
<div class="col-sm-4 case-assignment-rule-value-selection">
<div class="select2-container select2-container-multi form-control case-assignment-rule-values" id="s2id_ddlRoleValues">
<ul class="select2-choices">
<li class="select2-search-choice">
<div>Manager</div>
<a href="#" onclick="return false;" class="select2-search-choice-close" tabindex="-1"></a>
</li>
<li class="select2-search-field">
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" id="s2id_autogen1" style="width: 34px;">
</li>
</ul>
</div>
<select class="form-control case-assignment-rule-values select2-offscreen" id="CaseAssignmentRules[0].RuleValues" multiple="multiple" name="CaseAssignmentRules[0].RuleValues" tabindex="-1" data-val="true" data-val-required="This field is required.">
<option value="aae">Manager</option>
<option value="aad">Manager Supervisor</option>
<option value="ab1">Accommodations Manager</option>
<option value="ab0">Service Representative</option>
<option value="84d">demo</option>
<option value="ab2">Employee</option>
<option value="ab4">Human Resource</option>
<option value="aaf">Case Manager</option>
<option value="ab3">Supervisor</option>
</select>
<span class="field-validation-valid help-block" data-valmsg-replace="true" data-valmsg-for="CaseAssignmentRules[0].RuleValues"></span>
</div>
我是不是漏掉了什么??
// Try using the class instead of id
$(document).on("change", ".case-assignment-rule-values", function () {
alert('I got the hit');
});
您的 MVC 代码:
<div id="rolesValues" class="case-assignment-hide">
@Html.DropDownList("ddlRoleValues", new SelectList(@Model.Roles, "Key", "Value"), new {@id= "ddlRoleValues", @class = "form-control case-assignment-rule-use-values", multiple = "multiple" })
<span class="field-validation-valid help-block" data-valmsg-replace="true"></span>
</div>
应该生成 id 为 rolesValues
和 ddlRoleValues
的 2 个元素。但是,在您生成的 HTML.
因此,根据此信息,您的问题无法回答,因为再多的代码也无法select这些元素中的任何一个,因为它们不存在。
正如 Erik Philip 所说,我的代码确实生成了自动 ID,但我们可以在 class 而不是 Id 上应用事件。这是我如何实现的。我在 $(document).ready(function ()
$(this).parent().siblings('.case-assignment-rule-value-selection').find('select.case-assignment-rule-values').select2().on("change", function () {
listToFilter(this);
);
var listToFilter = function (e) {
var selectedLength = $(e).select2('data');
}
已将事件传递给 function
,它工作正常。