Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据从AJAX获得的JSON数据禁用select选项?_Javascript_Jquery_Html_Ajax_Json - Fatal编程技术网

Javascript 如何根据从AJAX获得的JSON数据禁用select选项?

Javascript 如何根据从AJAX获得的JSON数据禁用select选项?,javascript,jquery,html,ajax,json,Javascript,Jquery,Html,Ajax,Json,我有一个带有几个选项的下拉菜单。我想循环遍历它们,并根据Ajax调用的结果在其中一些属性上支持禁用属性 这就是我想要达到的目标 可报告数据样本 HTML 结果, 我在显示控制台时没有出错。 但我一直看到我的下拉菜单并没有像我希望的那样被禁用 任何提示/帮助/建议对我都很重要 我不确定,但我认为您应该在代码中检查currentVal的值,它是否给出了像s-00591这样的值,因为如果您在那里得到错误的值,它不会禁用您想要的选项 如果您将所需的值而不是true传递给prop'disabled',则您

我有一个带有几个选项的下拉菜单。我想循环遍历它们,并根据Ajax调用的结果在其中一些属性上支持禁用属性

这就是我想要达到的目标

可报告数据样本

HTML

结果,

我在显示控制台时没有出错。 但我一直看到我的下拉菜单并没有像我希望的那样被禁用


任何提示/帮助/建议对我都很重要

我不确定,但我认为您应该在代码中检查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