ipad 禁用没有 jquery 的选择选项

发布于 2024-12-06 06:44:42 字数 1779 浏览 1 评论 0原文

有没有一种方法、插件或代码片段可以用来

<select><option disable="disable">....</option></select>

禁用 ipad 上 safari 中的选项?

后期编辑:这里是代码:

     function getSelectedValues(ids) {

    var selectedValues = []
    , $selected = $('.selector').children('option:selected');       

    $selected.each(function(){  
        if(this.value != 0){
            if(ids == true){
                selectedValues.push(this.value+'-'+$(this).parent().attr('id'));
            } else {
                selectedValues.push(this.value);
            }
        }           
    });     
    return selectedValues;  
}


function clearDisabled() {
    $('.selector').children(':disabled').attr('disabled', false);
}

function disableSelected(selectedValues,id) {

    sv = selectedValues || [];

    if(id === true){
        var selectedIds  = [];
        var selectedVals = [];

        $.each(selectedValues, function(key, value) { 
            values = value.split('-');

            selectedVals.push(values[0]);
            selectedIds.push(values[1]);

        });

        for (var i=0;i<selectedVals.length;i++) {
            $('.selector').each(function(){
                if($(this).attr('id') == selectedIds[i]){
                    $('option[value=' + selectedVals[i] + ']',this).not(':selected').attr('disabled', true);
                }
            });
        }
    }
}

$(document).ready(function(){
    $('.selector').change(function(){
        selectedValues = getSelectedValues(true);
        clearDisabled();
        disableSelected(selectedValues, true);
    });

    var selectedValues = getSelectedValues(true);
    disableSelected(selectedValues, true);
});

我做了一些挖掘,我意识到这是 safari mobile 的限制...

There is a way,plugin or code snippet that i could use to make

<select><option disable="disable">....</option></select>

options in safari on ipad to be disabled ?

latter edit: here is the code:

     function getSelectedValues(ids) {

    var selectedValues = []
    , $selected = $('.selector').children('option:selected');       

    $selected.each(function(){  
        if(this.value != 0){
            if(ids == true){
                selectedValues.push(this.value+'-'+$(this).parent().attr('id'));
            } else {
                selectedValues.push(this.value);
            }
        }           
    });     
    return selectedValues;  
}


function clearDisabled() {
    $('.selector').children(':disabled').attr('disabled', false);
}

function disableSelected(selectedValues,id) {

    sv = selectedValues || [];

    if(id === true){
        var selectedIds  = [];
        var selectedVals = [];

        $.each(selectedValues, function(key, value) { 
            values = value.split('-');

            selectedVals.push(values[0]);
            selectedIds.push(values[1]);

        });

        for (var i=0;i<selectedVals.length;i++) {
            $('.selector').each(function(){
                if($(this).attr('id') == selectedIds[i]){
                    $('option[value=' + selectedVals[i] + ']',this).not(':selected').attr('disabled', true);
                }
            });
        }
    }
}

$(document).ready(function(){
    $('.selector').change(function(){
        selectedValues = getSelectedValues(true);
        clearDisabled();
        disableSelected(selectedValues, true);
    });

    var selectedValues = getSelectedValues(true);
    disableSelected(selectedValues, true);
});

I did some digging and i realize that this is a limitation of safari mobile...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦明 2024-12-13 06:44:42

获得跨浏览器的实现更加复杂,iPad和iPhone的safari,ie6和我认为其他一些浏览器只是忽略禁用的选项。

你需要删除它们。因此,保留一份副本并在需要时重建选项。

这是一个示例,您可以根据选项的值启用/禁用选项

var $select = $("select#myselect");
$select.data("copy", $select.find("option"))

function disableOption($option) {
  var optionVal = $option.val();
  $select.empty()
  $select.data("copy").each(function(){
    var $currentOption = $(this);
    if (optionVal !== $currentOption.val() && $currentOption.attr("disabled")!=="disabled") $select.append($currentOption);
    else $currentOption.attr("disabled", "disabled");
  });
}


function enableOption($option) {
  var optionVal = $option.val();
  $select.empty()
  $select.data("copy").each(function(){
    var $currentOption = $(this);
    if (optionVal === $currentOption.val()) $currentOption.removeAttr("disabled")
    if ($currentOption.attr("disabled")!=="disabled") $select.append($currentOption);
  });
}

It is more complicated to get a cross browser implementation, safari for iPad and iPhone, ie6 and I presume some other browser just ignore the disabled options.

You need to remove them. So, keep a copy of it and rebuild the options whenever you want.

This is an example where you can enable/disable options based on their value

var $select = $("select#myselect");
$select.data("copy", $select.find("option"))

function disableOption($option) {
  var optionVal = $option.val();
  $select.empty()
  $select.data("copy").each(function(){
    var $currentOption = $(this);
    if (optionVal !== $currentOption.val() && $currentOption.attr("disabled")!=="disabled") $select.append($currentOption);
    else $currentOption.attr("disabled", "disabled");
  });
}


function enableOption($option) {
  var optionVal = $option.val();
  $select.empty()
  $select.data("copy").each(function(){
    var $currentOption = $(this);
    if (optionVal === $currentOption.val()) $currentOption.removeAttr("disabled")
    if ($currentOption.attr("disabled")!=="disabled") $select.append($currentOption);
  });
}
撑一把青伞 2024-12-13 06:44:42
$("select option[disable='disable']").attr("disabled","disabled");

或者如果您使用的是 jquery 1.6 或更高版本

  $("select option[disable='disable']").prop("disabled",true);
$("select option[disable='disable']").attr("disabled","disabled");

or if you are using jquery 1.6 or higher

  $("select option[disable='disable']").prop("disabled",true);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文