Jquery Mobile:无法使用 jquery select 重新启用禁用选项(mobiscroll)

Posted

技术标签:

【中文标题】Jquery Mobile:无法使用 jquery select 重新启用禁用选项(mobiscroll)【英文标题】:Jquery Mobile: Canot re-enabled disabled option within jquery select (mobiscroll) 【发布时间】:2013-05-24 09:50:28 【问题描述】:

我正在尝试禁用 jquery 选择中的所有无效选项.....禁用特定选项可以正常工作,但是当我想重新启用它们时,它们仍然保持禁用状态....我已经用谷歌搜索了并且尝试了很多来解决这个问题,但我的尝试都不起作用....

以下是一些更详细的解释。如果有任何帮助,我将不胜感激!

带有所有选项的 jquery 选择:

    <select id="opt_projects" class="f-dd">
        <optgroup label="Intern">
            <option value="1">Arbeitsbeginn</option>
            <option value="2">Pause Beginn</option>
            <option value="3">Pause Ende</option>
            <option value="4">Fahrzeit Start</option>
            <option value="5">Fahrzeit Stop</option>
            <option value="6">Feierabend</option>
        </optgroup>
        <optgroup label="Auftrag 123482">
            <option value="20">Instandhaltungsauftrag</option>
            <option value="21">Reparaturauftrag</option>
            <option value="22">Wartungsauftrag</option>
                <option value="23">Kalibirierungsauftrag</option>
            <option value="24">Serviceauftrag</option>
            <option value="25">Aufarbeitungsauftrag</option>
    </optgroup>
</select>

单击特定按钮后,这些值会显示在 mobiscroll 选择滚动器中:

在用户选择了一项任务后(例如 Arbeitsbegin [eng.: Start of work]),我想禁用此选项。这工作正常。但是当我想再次启用它时,这不起作用。按照点击处理程序、mobiscroll-scroller 和更改功能的代码(不起作用....)

点击处理程序:

//Click-Listener für den Projekt-Change-Button
     $('#btn_changeProject').click(function () 
     myLogger("Project-Change-Button wurde geklickt");
     $('#opt_projects').mobiscroll('show');
     return false;
);

Mobiscroll-Scroller:

    // Initialisieren und anhängen des scroller
 $('#opt_projects').mobiscroll().select(
        theme: 'android-ics',
        group: true,
        lang: 'de',
        display: 'bottom',
        mode: 'clickpick',
        inputClass: 'i-txt',
        label: 'Vorgangsart',
        groupLabel: 'Auftrag',
        headerText: function(value) 
                return 'Gewählte Vorgangsart: ' + value;
        ,
        // Nachdem ein Element selektiert wurde
        onSelect: function(valueText, inst) 
            // und alle Labels neu erzeugt
            myLogger("Neues Projekt wurde selektiert");
            changeLabels(valueText);
        
    );

以及不工作的change函数(这个函数被mobiscroll-scroller的onSelect-callback函数调用)

 // Validierungen für die Optionsliste
function validateOptions()  
var update_options = function () 
    if ($('#opt_projects option[value="3"]').prop('disabled'))  
        // none of this work......
        $('#opt_projects option[value="3"]').prop('disabled', false);
 //         $('#opt_projects option[value="3"]').removeAttr('disabled').change();
 //         $('#opt_projects option[value="3"]').removeAttr('disabled');
 //         $('#opt_projects option:eq(2)').prop('disabled', false);
 //         $('#opt_projects option:eq(2)').removeAttr('disabled');
     else 
        // Works fine..........
        $('#opt_projects option[value="3"]').prop('disabled', true);
        
     ;
     $(update_options);
     $("#opt_projects").change(update_options);
//   $("#opt_projects").trigger("refresh");
//   $('#opt_projects').trigger('change');

如果有人能帮助我解决这个问题,那就太好了……谢谢,Daniel

【问题讨论】:

更新:使用萤火虫显示,选项被禁用,并通过上面显示的代码重新启用....不幸的是,mobiscroll 滚动器没有注意到(它只注意到禁用选项....) 任何帮助都将是一个梦想! 【参考方案1】:

您可以使用

重新启用所有选择选项
$('#opt_projects').find("option").each(function() 
    $(this).attr("disabled", false);
    $('#opt_projects').selectmenu("refresh", true); 
);

或者只是 value = 3 的选项

$('#opt_projects').find("option").each(function() 
    if($(this).val()== "3" )
        $(this).attr("disabled", false);
        $('#opt_projects').selectmenu("refresh", true); 
    
);

【讨论】:

以上是关于Jquery Mobile:无法使用 jquery select 重新启用禁用选项(mobiscroll)的主要内容,如果未能解决你的问题,请参考以下文章

无法复制 Jquery Mobile 自动完成演示

jquery mobile ui无法在移动设备上运行

jQuery Mobile 无法读取触发器上未定义的“选项”(“pagecreate”)

无法阻止被动事件监听器jQuery Mobile中的默认

使用 PhoneGap 在 JQuery Mobile 的外部浏览器中无法打开链接

JQuery Mobile Linked Listview 无法正常工作?