我目前有一个select
显示选项为
<option>{{ tag.name }} ({{ tag.count }})</option>
但是,我希望当用户选择选项时,在选定的选项中,只有name
是可见的,而不是最后一部分。想想 stack* 如何显示标签计数,但在您选择它时将其隐藏。
想法?谢谢。
编辑:抱歉不清楚。在selected 中,当您选择一个选项时,一个文本框会填满所选数据。我希望修改该文本,而不是<select>
!
我目前有一个select
显示选项为
<option>{{ tag.name }} ({{ tag.count }})</option>
但是,我希望当用户选择选项时,在选定的选项中,只有name
是可见的,而不是最后一部分。想想 stack* 如何显示标签计数,但在您选择它时将其隐藏。
想法?谢谢。
编辑:抱歉不清楚。在selected 中,当您选择一个选项时,一个文本框会填满所选数据。我希望修改该文本,而不是<select>
!
编辑:对于您的编辑,如果选项元素的value
属性设置为您要使用的文本,请尝试:
$(document).ready(function() {
$("select").change(function() {
$("input").val( $(this).val() );
}).change();
});
演示:http: //jsfiddle.net/CdKGT/2/
或者,如果您由于某种原因不能使用该value
属性并想从显示的内容中提取文本:
$("select").change(function() {
$("input").val( $("option:selected",this).text().replace(/ \(\d+\)$/,"") );
}).change();
演示:http: //jsfiddle.net/CdKGT/3/
显然,您将使用 id 或 class 来标识选择和输入,而不仅仅是$("select")
and $("input")
,但您明白了。
我的原始答案(我对您原始问题的解释):
你可以这样做:
<select>
<option value="css" data-count="1">css 1</option>
<option value="html" data-count="55">html 55</option>
<option value="java" data-count="37">java 37</option>
<option value="javascript" data-count="20">javascript 20</option>
<option value="jquery" data-count="12">jquery 12</option>
</select>
进而:
$(document).ready(function() {
$("select").change(function() {
$(this).find("option").html(function(){ return this.value + " " +
$(this).attr("data-count"); });
$("option:selected",this).html(this.value);
}).change();
});
演示:http: //jsfiddle.net/CdKGT/1/
(显然,您可以通过缓存 jQuery 对象等来稍微优化函数,但为了概念证明,我保持简单。)
Chosen 不支持你想要的功能
Kinda sorta 有一个解决方法......但是它并不能始终如一地工作,因为 selected 在内部是如何做的。 http://jsfiddle.net/2hHYh/
选择在选择选项时,选择并不总是触发更改事件,但它仍将将显示文本设置为单击的任何内容。:O 这在再次单击相同选项时尤其明显。
试试这个代码:
$("select").change(
function()
{
var value = $("option:selected").html()
var new_value = value.replace(/\s*\([0-9]+\)/, "");
$("option:selected").html(new_value);
} );
$('select').on('change', function () {
var _selected = $(this).find('option:selected'),
_orig = _selected.text();
var _index = _orig.indexOf(' (');
_selected.text(_orig.substring(_index, ''));
});