在Rails 3.1(jQuery)中使用CoffeeScript从多选选项中创建一个句子

时间:2011-10-26 03:37:26

标签: jquery ruby-on-rails-3.1 coffeescript

我需要将多个选择中所选选项的文本值作为“句子”返回 - 只需加入字符串,用逗号和空格分隔。

为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 ...
一切都没有成功。

我用谷歌搜索过,并且可能用错误的搜索条件环顾四周,因为我是空的。 我觉得这只是一个语法上的事情。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这不是CoffeeScript问题,它只是一个简单的旧jQuery问题。特别是“'this :selected'”不是CSS或jQuery中的有效选择器(this是JavaScript中的变量,但它在选择器字符串中没有意义)。如果您只想对特定元素的子元素使用CSS选择器(例如在您的场景中为this),则可以将该元素作为第二个参数传递给$,例如:

$(':selected', this).each ...