как иметь onchange в collection_select с помощью jquery - PullRequest
1 голос
/ 14 февраля 2010

Я использую jquery на своей html-странице и хочу иметь событие onchange на collection_select.

Если я добавлю <%= javascript_include_tag :defaults %>, тогда мой код jquery не будет работать.

В основном у меня есть collection_select следующим образом:

<%=collection_select(:product, 'prod_name', @prods, :id, :prod_name, 
{:prompt => 'Select Product'},{:onchange =>  remote_function(:url => 
{:action => 'volume_or_quant'}, :with => "'id=' + this.value")})%>

Тогда у меня есть тег выбора и текстовое поле:

<%=select_tag :volume, options_for_select(["", "1/8 lb", "1/4 lb", "Single", 
"Multi 5" ], "N/A") %>
<%= text_field_tag :quantity, "", :size=>"4"%>

Когда в collection_select выбрана опция, я хочу вернуться к своему действию и проверить, есть ли в БД объем или единица измерения. На основании чего, вышеупомянутые селекторное окно / текстовое поле будут включены.

сейчас мое действие выглядит так:

def volume_or_quant
    @product = Product.find(params[:id])
    puts "Value: " + @product.volume        
end

Однако, когда я выбираю что-то ... ничего не происходит. Прямо сейчас у меня нет javascripts по умолчанию.

Требуется ли для прототипа javascript по умолчанию прототип? или это можно сделать с помощью jquery?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2010

Да, remote_function требует включения библиотек прототипов. Это можно сделать с помощью jQuery, но не с помощью помощника remote_function, как вы пытаетесь.

Чтобы заставить работать jQuery:

Проблема, возникающая при включении значений по умолчанию, заключается в том, что Prototype пытается использовать $, как и jQuery. Вы можете использовать режим jQuery noConflict, чтобы исправить это.

Включите значения по умолчанию, как вы пытались сначала, но затем следуйте этому совету, чтобы снова запустить jQuery:

Вы можете сделать несколько вещей, но если вы используете локальную копию jQuery, добавьте ее как самую последнюю строку (и включите jQuery после значений по умолчанию в вызове javascript_include_tag):

jQuery.noConflict();

Если вы используете Google CDN, сделайте следующее:

<%= javascript_include_tag :defaults, "http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" %>
<script type="text/javascript"> jQuery.noConflict() </script>

Затем убедитесь, что весь ваш код jQuery окружен либо этим (для любого кода, который раньше жил в document.ready:

// $ = Prototype
jQuery(document).ready(function($){
    // $ = jQuery
});

// or shorthand:
jQuery(function($){
    // $ = jQuery
});

Или просто используйте это (Создает частную область видимости, где $ = jQuery):

// $ = Prototype
(function($){
    // $ = jQuery
})(jQuery);
0 голосов
/ 14 февраля 2010

По умолчанию rails настроен или включает работу с прототипом, а не с jquery, код <%= javascript_include_tag :defaults %> включает скрипты прототипа в ваш html во время выполнения. Есть несколько плагинов для рельсов, таких как jRails, чтобы включить jQuery с рельсами, но он еще не полностью интегрируется с рельсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...