Javascript 如何根据从AJAX获得的JSON数据禁用select选项?
我有一个带有几个选项的下拉菜单。我想循环遍历它们,并根据Ajax调用的结果在其中一些属性上支持禁用属性 这就是我想要达到的目标 可报告数据样本 HTML 结果, 我在显示控制台时没有出错。 但我一直看到我的下拉菜单并没有像我希望的那样被禁用Javascript 如何根据从AJAX获得的JSON数据禁用select选项?,javascript,jquery,html,ajax,json,Javascript,Jquery,Html,Ajax,Json,我有一个带有几个选项的下拉菜单。我想循环遍历它们,并根据Ajax调用的结果在其中一些属性上支持禁用属性 这就是我想要达到的目标 可报告数据样本 HTML 结果, 我在显示控制台时没有出错。 但我一直看到我的下拉菜单并没有像我希望的那样被禁用 任何提示/帮助/建议对我都很重要 我不确定,但我认为您应该在代码中检查currentVal的值,它是否给出了像s-00591这样的值,因为如果您在那里得到错误的值,它不会禁用您想要的选项 如果您将所需的值而不是true传递给prop'disabled',则您
任何提示/帮助/建议对我都很重要 我不确定,但我认为您应该在代码中检查currentVal的值,它是否给出了像s-00591这样的值,因为如果您在那里得到错误的值,它不会禁用您想要的选项
如果您将所需的值而不是true传递给prop'disabled',则您尝试的基本操作应该有效,如果您不使用您知道的内容,那么prop'disabled','disabled' 下面是一个基本示例,放弃AJAX和其他与问题核心无关的东西: 代码: 变量用户=[ {userId:'s-00591',可报告:true}, {userId:'s-00592',可报告:false}, {userId:'s-00593',可报告:false}, {userId:'s-00594',可报告:false}, {userId:'s-00595',可报告:false}, ]; $.eachusers,函数索引,用户{ $'rn-dd选项[value='+user.userId+']'.prop'disabled',!user.reportable; }; 类视图 学生S00591 学生S00592 学生S00593 学生S00594 学生S00595 .prop'disabled',true;我相信这是一个打字错误或什么的,因为它禁用了每一个选项 jsonObj中的true和false值可能是字符串。所以,无论值是“真”还是“假”,它都被视为真,所以!reportable始终为false,这意味着它不会禁用任何选项 您可能需要先检查它是否为字符串,如:
reportable = (typeof v.reportable === 'string') ? v.reportable === 'true' : v.reportable
首先将其转换为布尔值
可报告的风险值=[
{userId:'s-00591',可报告:'true'},
{userId:'s-00592',可报告:'false'},
{userId:'s-00593',可报告:'false'},
{userId:'s-00594',可报告:'false'},
{userId:'s-00595',可报告:'false'}
];
//检查字符串和布尔值之间的差异。
可报告风险值2=[
{userId:'s-00591',可报告:true},
{userId:'s-00592',可报告:false},
{userId:'s-00593',可报告:false},
{userId:'s-00594',可报告:false},
{userId:'s-00595',可报告:false}
];
$.eachreportable,functioni,v{
var userId=v.userId;
var可报告=v.可报告;
var currentVal=userId;
console.log'start';
console.loguserId+|+可报告;
$'rn-dd选项[value='+currentVal+']'。属性'disabled',!可报告;
console.log'end';
};
$.eachreportable2,functioni,v{
var userId=v.userId;
var可报告=v.可报告;
var currentVal=userId;
console.log'start';
console.loguserId+|+可报告;
$'rn-dd2选项[value='+currentVal+']'。属性'disabled',!可报告;
console.log'end';
};
类视图
学生S00591
学生S00592
学生S00593
学生S00594
学生S00595
类视图
学生S00591
学生S00592
学生S00593
学生S00594
学生S00595
try.prop'disabled','disabled'reference我的想法与@ChaitanyaGadkari.Simple check console.log$'rn-dd option[value='+currentVal+']'相同。要查看选择器是否匹配,布尔值与prop'disabled'匹配很好,boolean但它必须是dataProvde real示例数据中的boolean,以便可以测试您的代码。代码中的问题可能是因为变量userId的值错误,该值用作Selector的一部分。您是对的,修改了我的示例代码,以反映问题数据结构的更准确表示。谢谢。我真的很欣赏这个片段和准确的答案。
<select class="rn-dropdown" id="rn-dd">
<option value="class-view">class view</option>
<!-- Students Populate Here -->
<option value="s-00591">Student S00591</option>
<option value="s-00592">Student S00592</option>
<option value="s-00593">Student S00593</option>
<option value="s-00594">Student S00594</option>
<option value="s-00595">Student S00595</option>
</select>
success: function(reportable) {
$.each(reportable , function(i, v) {
var userId = v.userId;
var reportable = v.reportable;
var currentVal = userId;
console.log('start');
console.log(userId + " | " +reportable);
$('#rn-dd option[value="' + currentVal + '"]').prop('disabled', true);
console.log('end');
});
}
reportable = (typeof v.reportable === 'string') ? v.reportable === 'true' : v.reportable