javascript - 通过javascript重新加载后,如何让我的下拉菜单选择一个值
问题描述
我有一个应用程序,允许用户通过 2 个下拉菜单编辑所选接收差异的原因和下一步操作。其中一个下拉列表只是直接硬编码到 HTML 中,第二个下拉列表是通过快速 JavaScript 根据第一个下拉列表中的值加载的。
第一个下拉菜单有 14 个原因选项,每个选项有 6-12 个操作步骤选项。如果用户更改了第一个下拉原因选择,它必须返回 SQL db 并检索适当的操作步骤选项列表以用于第二个下拉列表。
所有这些都有效。
我遇到的问题是用户第一次选择要编辑的差异。那时它加载视图并根据存储在 SQL DB 中的值设置第一个下拉列表的值,然后运行 java 以首先为空,然后将新的选项列表附加到第二个下拉列表。
我无法开始工作的是让它设置第二个下拉列表的值,然后运行 java 以创建选项列表,再次尝试根据存储在 SQL DB 中的值来设置它以解决该差异。
如果我将第二个选项列表硬编码为与第一个列表相同,并且在第一个下拉列表更改之前不使用 java 重新加载它,那么我可以像第一个一样设置值. 然后第二个下拉列表的问题将列出大约 30-40 个选项,直到您更改第一个下拉列表 - 其中只有 6-12 个对于选择的特定原因是准确的。
我最初设置 2 个下拉值的方式,当两个列表都被硬编码时(仍然适用于第一个下拉):
<script>
// script to set drop down values to those stored on DB after document finished loading
document.getElementById("ReasonDD").value = "@Model.DiscReason";
document.getElementById("NextActionDD").value = "@Model.NextAction";
</script>
如果第一个被更改,用于更改第二个下拉列表的脚本(再次正常工作):
$(function () {
$("#ReasonDD").change(function () {
var option = $(this).val();
$("#NextActionDD").empty();
var url = "GetActionValues?selectedOption=" + option;
$.post(url, function (actValues) {
$.each(actValues, function (i, actValue) {
$("#NextActionDD").append($('<option></option>').val(actValue).html(actValue));
});
});
});
});
该脚本是在第一次选择差异时运行的脚本,它正确加载了第二个下拉菜单,但我已经尝试了所有 3 种显示的方式,无论是一起还是单独设置值,但到目前为止都没有。显示的 console.log 有一个有效选择,等于加载到第二个下拉列表中的值之一:
$(function () {
var reasonLoad = "@Model.DiscReason";
if (reasonLoad > "") {
var option = reasonLoad;
$("#NextActionDD").empty();
var url = "GetActionValues?selectedOption=" + option;
$.post(url, function (actValues) {
$.each(actValues, function (i, actValue) {
$("#NextActionDD").append($('<option></option>').val(actValue).html(actValue));
});
});
console.log("@Model.NextAction");
$("#NextActionDD").val = "@Model.NextAction";
$("#NextActionDD").value = "@Model.NextAction";
document.getElementById("NextActionDD").value = "@Model.NextAction";
}
});
我现在也尝试了 Rajesh G 的想法:
$('#NextActionDD option[@Model.NextAction]').attr('selected','selected');
我直接在我的 console.log("@Model.NextAction") 之后添加了它,而不是并注释掉了其他 3 个。同时运行 2 个测试,用它而不是 console.log 行运行 2 个测试,总共 4 个测试。
在控制台上使用 console.log 进行的 2 次测试显示“@Model.NextAction”值为“Other”和“Wait for Vendor Response”,但随后 4 次都给出了相同的错误消息(两次都使用 console.log,两者次替换):
错误:语法错误,无法识别的表达式:#NextActionDD option[Close Discrepency]
尽管 Close Discrepancy 不是 @Model.NextAction 值,但它是附加到 #NextActionDD 下拉列表选项列表中的最后一个选项
解决方案
推荐阅读
- c++ - 继承函数是否适用于 C++ 中的基类元素或派生类元素?
- c++ - 链接器 /delayload 不能完全使用 winhttp.dll
- autodesk-forge - 如何从对象获取坐标即顶点
- python - 实现中序遍历时的NameError
- python - 生物信息学:将列表项与字典键匹配并打印匹配的键
- .net - VB.NET 如何在类的文档中添加新行
- azure - Terraform 使用 Azure 服务主体进行身份验证失败
- mysql - 连接到现有数据库 - node.js
- r - 整洁的功能不适用于 USAboundaries shapefile 数据
- python - 如何只接收来自 Python 中创建的页面监视器的新链接?