Используйте CoffeeScript в Rails 3.1 (jQuery), чтобы создать предложение из нескольких вариантов выбора - PullRequest
0 голосов
/ 26 октября 2011

Мне нужно, чтобы текстовое значение выбранных опций в множественном выборе возвращалось как «предложение» - просто для объединения строк, разделенных запятой и пробелом.

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 ()

- / редактировать -

- редактировать 2 -

на сайте CoffeeScript, он показывает приведенный выше скрипт как компилируемый в:

var $;
$ = jQuery;
$.fn.selectedToSentence = function() {
  var arr;
  arr = [];
  $('this :selected').each(function(i, selected) {
    return arr[i] = $(selected).text();
  });
  return arr.join(", ");
};

- / редактировать 2 -

Я также попробовал следующие синтаксисы:

$(@ :selected).each ...
$('@ :selected').each ...
$("#{@} :selected").each ...

все безуспешно.

Я гуглил и посмотрел вокруг, возможно, с неправильными поисковыми терминами, потому что я выхожу пустым. Я чувствую, что это просто синтаксическая вещь. Что я делаю неправильно?

1 Ответ

2 голосов
/ 26 октября 2011

Это не проблема CoffeeScript, это просто старая проблема jQuery. В частности, «'this :selected'» не является допустимым селектором в CSS или jQuery (this - это переменная в JavaScript, но она не имеет смысла в строке селектора). Если вы хотите использовать селектор CSS только для дочерних элементов определенного элемента (например, this в вашем сценарии), вы можете передать этот элемент в качестве второго параметра в $, например ::

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