我需要将多个选择中所选选项的文本值作为“句子”返回 - 只需加入字符串,用逗号和空格分隔。
为select生成的HTML如下所示:
<select id="foo_bazs_attributes_0_bar_ids" name="foo[bazs_attributes][0][bar_ids][]" multiple="multiple" data-validate="true">
<option value="1">I</option>
<option value="2">Want</option>
<option value="3">a</option>
<option value="4">Sentence</option>
</select>
所以我需要我的功能来回复“我,想要,一个句子”。
为了用jQuery做到这一点,我发现了以下内容(http://calisza.wordpress.com/2009/03/29/6-jquery-snippets-you-can-use-to-manipulate-select-inputs/):
var foo = [];
$('#multiple :selected').each(function(i, selected){
foo[i] = $(selected).text();
});
所以我在CoffeeScript文件中写了以下内容:
$.fn.selectedToSentence = () ->
arr = []
$('this :selected').each (i, sel) ->
arr[i] = $(sel).html()
arr.join(", ")
但它永远不会返回字符串。
- 编辑 -
我称之为: $( '选择[ID $ = “_ bar_ids”]')。selectedToSentence()
- / edit -
- 编辑2 -
在CoffeeScript网站上,它将以上脚本显示为编译为:
var $;
$ = jQuery;
$.fn.selectedToSentence = function() {
var arr;
arr = [];
$('this :selected').each(function(i, selected) {
return arr[i] = $(selected).text();
});
return arr.join(", ");
};
- / edit 2 -
我也尝试了以下语法:
$(@ :selected).each ...
$('@ :selected').each ...
$("#{@} :selected").each ...
一切都没有成功。
我用谷歌搜索过,并且可能用错误的搜索条件环顾四周,因为我是空的。 我觉得这只是一个语法上的事情。我做错了什么?
答案 0 :(得分:2)
这不是CoffeeScript问题,它只是一个简单的旧jQuery问题。特别是“'this :selected'
”不是CSS或jQuery中的有效选择器(this
是JavaScript中的变量,但它在选择器字符串中没有意义)。如果您只想对特定元素的子元素使用CSS选择器(例如在您的场景中为this
),则可以将该元素作为第二个参数传递给$
,例如:
$(':selected', this).each ...