【问题标题】:How to display the second half of text on HTML select drop-down list?如何在 HTML 选择下拉列表中显示文本的后半部分?
【发布时间】:2016-03-23 20:41:01
【问题描述】:

正如标题所述,我有一个固定宽度为 80 像素的选择下拉列表,如下所示:

<select id="dd_country_code_2" name="dd_country_code_2" style="width: 120px;  height: 23px;">
    <option value="SEL">(Country code)</option>
    <option value="AF">Afghanistan ‏(‎+93)</option>
    <option value="AL">Albania ‏(‎+355)</option>
    <option value="DO">Dominican Republic ‏(‎+1)</option>
    <option value="FK">Falkland Islands ‏(‎+500)</option>
</select>

当用户选择一个选项时,结果如下:

但是,不是这样,我希望文本的后半部分显示在列表的 80 像素中,以便用户能够清楚地看到其国家代码。

例如:

我怎样才能做到这一点?

【问题讨论】:

  • 这看起来很糟糕,作为一个 UI,就像一个非专业网站。你为什么要那个?
  • 我希望这样可以避免用户的任何错误(选择国家代码而不是编写它们)...另外,(完整)列表是从模板中获取的,所以我可以' t重新格式化...
  • 为什么需要固定宽度? ...这就是为什么它看起来很糟糕,当它变窄时
  • 如果您真的无法使用更简洁的 UI,请选择马里奥的解决方案,它是一个不错的解决方案...更新了您的项目,以便您看到它的外观
  • 我想我不能用这个来制作更干净的 UI!我的空间有点有限。另外,考虑一下像这样的大国名称:“Saint Helena, Ascension and Tristan da Cunha ‏(‎+290)”。你有什么建议?仅针对 1 或 2 个大国家/地区名称使列表更宽(例如 500 像素)??

标签: javascript html css html-select


【解决方案1】:

您可以使用direction: rtl; css 属性。

(function() {
  document.querySelector('select').addEventListener('change', function(e) {
    e.target.style.direction = 'ltr';
    if(e.target.selectedIndex > 0) {
      e.target.style.direction = 'rtl';
    };
  });
})();
#dd_country_code_2 {
  width: 120px;
}
<select id="dd_country_code_2" name="dd_country_code_2" style="height: 23px;">
    <option value="SEL">(Country code) </option>
    <option value="AF">Afghanistan (+93) </option>
    <option value="AL">Albania (+355) </option>
    <option value="DO">Dominican Republic (+1) </option>
    <option value="FK">Falkland Islands (+500)</option>
</select>

【讨论】:

  • 看起来很好,但我无法在我的网站上使用它。我将脚本放在 标签内,在 内,但它运行不正确(我使用的是 Firefox 45.0.1)...如果我从列表中选择一个国家,箭头向左,文本变为 ex。 “(+355)阿尔巴尼亚”,就像你的第一版......它没有堆栈溢出的“代码sn-p”的功能......
  • @MinimalTech 确保脚本位于正文的末尾,在实际选择之后。
  • 我已经把它放在了身体的最后,是的!请看你自己:we.tl/LxlCgI2xur(下载 html 文件)..
  • @MinimalTech 我试过了,但它实际上不起作用......我还下载了 SO sn-p,它也不起作用......有趣......我会看看稍后另一种选择,完成后会通知您。
【解决方案2】:

由于宽度是个问题,这里有另一种方法,当列表项太大时,它会被截断。

已更新,使用伪键按住向下箭头,以便将input 设为全宽/全高

(function() {
  document.querySelector('select').addEventListener('change', function(e) {
    var val = e.target.options[ e.target.selectedIndex ].text.split('(');
    if (val[0].length > 12) {
      val[0] = val[0].slice(0, 10) + '...';
    }    
    e.target.nextElementSibling.value = val.join('(');
  });
})();
.selectable {
  position:relative;
  background-color:white;
  border:solid grey 1px;
  width:120px;
  height:18px;
  overflow: hidden;
  font-size: 12px;
}
.selectable:after {
  content: '\25BC';
  position: absolute;
  top: 0;
  right: 0;
  width:14px;
  height:18px;
  line-height:20px;
  pointer-events: none;
  font-size: 10px;
  text-align: center
}
.selectable select {
  position:absolute;
  top:0px;
  left:0px;
  font-size: inherit;
  border:none;
  width:120px;
  margin:0;
}
.selectable input {
  position:absolute;
  top:0px;
  left:0px;
  width:100%;
  height:100%;
  padding:1px;
  font-size: inherit;
  border:none;
  pointer-events: none;
}
.selectable select:focus, .selectable input:focus {
  outline:none;
}
<div class="selectable">
  <select>
    <option value="SEL">(Country code)</option>
    <option value="AF">Afghanistan (+93)</option>
    <option value="AL">Albania (+355)</option>
    <option value="DO">Dominican Republic (+1)</option>
    <option value="FK">Falkland Islands (+500)</option>
  </select>
  <input type="text" name="countrycode" value="(Country code)" />
</div>

【讨论】:

  • 首先,感谢您提供的解决方案版本,但这个解决方案对我来说有两个主要问题:1)列表是从模板中“按原样”获取的,它非常广泛,所以我无法手动逐一编辑所有记录,2)用户很难知道必须将鼠标放在名称上并等到显示工具提示才能了解点隐藏的内容......我不明白为什么@MarioD 的解决方案对我不起作用...
  • @MinimalTech 是的,我理解这两个问题,所以你需要的是选择时的小宽度,但在选择过程中,你想全部显示,对吗? ..如果是的话,可能有一种方法,使用脚本,所以让我知道,我看看。
  • 你指的是“动态宽度 ,它可以像我给出的描述一样表现在图片中(在我的问题中) - 或者 - 类似于 MarioD 的解决方案,它在 Stack Overflow 的代码 sn-p 中完美运行,但它适用于我的一半功能,我不明白为什么!
  • @MinimalTech 用全新的解决方案更新了我的答案。
  • 哇,非常好的方法!我从来没有想过用 的内容在文本框后面可见 - 在底部)。这些问题能解决吗? (此外,检查与 IE 11 和 Firefox 的视觉兼容性。)
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 2017-05-11
相关资源
最近更新 更多