根据另一个下拉列表的选项值设置一个下拉列表的文本

时间:2014-08-23 20:11:37

标签: javascript jquery

我有一个复选框,可将时间设置为24或12小时格式。如果用户检查或取消选中此项,我希望以备用时间格式将当前时间设置为同一时间。因此,如果时间目前是17:00,则应设置为下午5点。目前它只是将它设置回第一个选项值。这是JSFIDDLE

<input type="checkbox" id="isCheckedFormat">24 Hour</p>

<select id="time1">

</select>


var a = ['12.00','13.00','14.00','15.00','16.00','17.00'];
var b = ['12.00','1.00pm','2.00pm','3.00pm','4.00pm','5.00pm'];
var d = [];

$('#isCheckedFormat').click(function() { 
    currenttime = $("#time1").val();
    console.log(currenttime);    
    if($('#isCheckedFormat').is(':checked')){
     d = a;
     c = 1;   
     $('#time1 option').remove();
     for(var i = 0; i<d.length; i++) {
            $('#time1').append('<option val="'+ c +'">'+d[i]+'</option>');
             c++;
         }
      $('#time1 option[val="currenttime"]').prop('selected',true);  

    }else{
     d = b;
     c = 1;
        $('#time1 option').remove();
     for(var i = 0; i<d.length; i++) {
            $('#time1').append('<option val="'+ c +'">'+d[i]+'</option>');
             c++;
    }
    $('#time1 option[val="currenttime"]').prop('selected',true);
 };   
});  

如何相应地设置时间?

3 个答案:

答案 0 :(得分:1)

这样的事情应该这样做

var a = ['12.00','13.00','14.00','15.00','16.00','17.00'];
var b = ['12.00','1.00pm','2.00pm','3.00pm','4.00pm','5.00pm'];

function populate(e) {
    var val = $('#time1').find('option:selected').index(),
        sel = $('#time1').empty();

    $.each(e.target.checked ? b : a, function(i, time) {
        $('<option />', {
            value : time,
            text  : time,
            prop  : {
                selected : i === val
            }
        }).appendTo(sel);
    });
}

$('#isCheckedFormat').on('change', populate).trigger('change')

FIDDLE

您正在获取选项的值,尝试重置选项等,但是在更改选项文本时更改了值,以便从不匹配。我决定使用索引,这是一致的。

答案 1 :(得分:1)

只添加两行:

1)一行到保存当前所选值的索引

var x = $('#time1').find('option:selected').index();

2)使用保存的索引设置所选值一行:

$('#time1').val(d[x]);

代码将是这样的:

...
$('#isCheckedFormat').click(function() { 
    ...
    console.log(currenttime);
    var x = $('#time1').find('option:selected').index();   // ADDED
    if($('#isCheckedFormat').is(':checked')){
        ...
    }else{
         ...
         for(var i = 0; i<d.length; i++) {
                $('#time1').append('<option val="'+ c +'">'+d[i]+'</option>');            
                $('#time1').val(d[x]);                    // ADDED
                c++;
        }
        ...
    };   

});    

答案 2 :(得分:0)

注意:这只是一个快速解决方案,整个设置看起来有点不方便。

var a = ['12.00','13.00','14.00','15.00','16.00','17.00'];
var b = ['12.00','1.00pm','2.00pm','3.00pm','4.00pm','5.00pm'];
var d = [];

$('#isCheckedFormat').click(function() { 
    currenttime = $("#time1").val();
    element = $("#time1 option:selected").index();
    console.log(currenttime);    
    if($('#isCheckedFormat').is(':checked')){
         d = a;
         c = 1;   
        $('#time1 option').remove();
         for(var i = 0; i<d.length; i++) {
                $('#time1').append('<option val="'+ c +'">'+d[i]+'</option>');
                 c++;
             }
          $('#time1 option:eq('+element+')').prop('selected',true);  

    }else{
        d = b;
        c = 1;
            $('#time1 option').remove();
         for(var i = 0; i<d.length; i++) {
                $('#time1').append('<option val="'+ c +'">'+d[i]+'</option>');
                 c++;
        }
        $('#time1 option:eq('+element+')').prop('selected',true);
    };   

});