【问题标题】:hide particular value in the option tag在选项标签中隐藏特定值
【发布时间】:2023-03-27 21:48:01
【问题描述】:

我有以下 AJAX 调用,现在我在下拉菜单中有公司的 description、name 和 id。

我想知道是否可以隐藏data.company[i].id 之类的内容。这将从 UI 中隐藏,但我仍然想要它,因为当用户选择一个项目时,我会在我的其他逻辑中获取 id。

$.ajax({
  url: 'myurl',
  type: 'GET',
  dataType: 'json',
  success: function(data) {
    $.each(data.company, function(i) {
      $("#mylist").append('<option>' + data.company[i].description + ' | ' + data.company[i].name + ' | ' + data.company[i].id + '</option>');
    });
  },
  error: function(request, error) {
    $.growl.error({
      title: "Error",
      message: "Webservice request failed!"
    });
  }
});

【问题讨论】:

标签: javascript jquery


【解决方案1】:

你可以设置值。

$.ajax({
  url: 'myurl',
  type: 'GET',
  dataType: 'json',
  success: function(data) {
    $.each(data.company, function(i) {
        var optData = data.company[i].description;
        var optText = data.company[i].name;
        var optValue = data.company[i].id;
        $("#mylist").append(`<option data-description="${optData}" value="${optValue}">${optText}</option>`);
    });
  },
  error: function(request, error) {
    $.growl.error({
      title: "Error",
      message: "Webservice request failed!"
    });
  }
});

获取当前选择的值:

$('#mylist').val();

获取当前选中的文本:

$('#mylist :selected').text();

获取当前选中的数据:

$('#mylist :selected').data('description');

【讨论】:

  • 谢谢。假设我也想隐藏description,但想像id 一样保留它。是否可以隐藏description 和id 而只显示name,因为我意识到描述占用了太多真实状态?
  • 是的。请检查罗里的答案..,您可以设置数据。 data-description="${data.company[i].description}" 要检索描述,请使用 $('#mylist :selected').data('description')
  • 谢谢,但他的回答是在下拉菜单中显示描述。我错过了什么吗?
  • 您需要从 optText 中删除 data.company[i].description。我已经更新了答案。
【解决方案2】:

如果您想从 UI 中隐藏一个值但保留它以便在您的逻辑中使用它,请尝试在元素上使用 data 属性。这对用户是不可见的,但可以在选择该选项时读出。

这是一个基本的例子:

let data = {
  company: [{
    description: 'Desc #1',
    name: 'Name #1',
    id: 'Id #1'
  },{
    description: 'Desc #2',
    name: 'Name #2',
    id: 'Id #2'
  },{
    description: 'Desc #3',
    name: 'Name #3',
    id: 'Id #3'
  }]  
}

let options = data.company.map(company => `<option data-id="${company.id}">${company.description} | ${company.name}</option>`);
$('#mylist').append(options).on('change', e => {
  let id = $(e.target).find('option:selected').data('id');
  console.log(e.target.value, id);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="mylist"></select>

【讨论】:

  • 谢谢。假设我也想隐藏description,但想像id 一样保留它。是否可以隐藏description 和id 并只显示name,因为我意识到描述占用了太多真实状态?
  • 当然,同样的方法也可以,只需定义另一个data属性
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 2018-06-24
相关资源
最近更新 更多