Шпрее: Нужно ли регистрировать события JQuery?

0

Приветствую Сообщество,

Я хочу изменить тег select HTML, чтобы вызвать событие Javascript в моем приложении Spree.

В представлении содержится команда collection_select, в результате получается следующий HTML:

<select id="dummy_id" name="something">
    <option value="">Please select</option>
    <option value="1">Case1</option>
    <option value="2">Case3</option>
    <option value="3">Case3</option>
</select>

Я написал следующую функцию Javascript:

$('#dummy_id').change(function () {
    alert("It works");
});

Я проверил в этом jsfiddle, что код действительно работает.

Когда я запускаю приложение, событие не запускается. Я много искал, чтобы попытаться найти документацию о возможной регистрации.

Вопрос: требуется ли какое-либо событие для регистрации? Если да, где разместить его и как должен выглядеть этот код? Если нет, подскажите, почему он отлично работает в jsfiddle, но не в RAILS_ENV = "разработка"?

С уважением !

Теги:
spree

3 ответа

1
Лучший ответ

Вам нужно обернуть ваш код jQuery в функцию ondocumentready ($(document).ready()), потому что селекторы jQuery будут работать только тогда, когда DOM будет построен и может быть пройден, иначе что-то вроде $('#select-product-in-persomodel_form') приведет к пустому массиву.

В jsFiddle вы можете указать, когда должен быть выполнен ваш JS-код (выпадающее меню в левом меню). Кажется, вы выбрали " No wrap - in <body> ", что приведет к тому, что вы добавите код как элемент сценария, последний в теле, а не завернут в любой $ (документ).ready() или $ (window).load()

Вызов развернутых селекторов в этом месте отнюдь не безопасен - DOM в данный момент не готов, но может работать в зависимости от вашего браузера и удачи. Если вы измените это на " No wrap - in <head> ", ваш код перестанет работать вообще, потому что при разборе <head> ваши элементы определенно не будут определены.

Что касается вашего другого вопроса: вы можете иметь несколько $(document).ready() без забот, они будут исполняться в порядке их вызовов. См. Также здесь.

1

У вас может быть несколько, но это не всегда самая сложная вещь. Старайтесь не злоупотреблять ими, так как это серьезно повлияет на читаемость. Кроме этого, это совершенно законно. См. Ниже:

Как мы можем:

$(document).ready(function() {
    alert('first one!');
});

$(document).ready(function() {
    alert('second one!');
});

$(document).ready(function() {
    alert('third one!');
});

но мы должны сделать это, как показано ниже:

 $(document).ready(function() {
        alert('first one!');
        alert('second one!');
        alert('third one!');
    });

но когда у нас есть причина, когда мы находимся в такой ситуации, как мы должны использовать ее снова, то мы можем использовать ее определенно. Однако я не думаю, что вы можете знать, каким образом они будут выполнены.

для справки вы должны пройти через это... Несколько $ (document).ready()

0

Я нашел решение: код JS необходимо изменить:

$('#dummy_id').change(function () {
    alert("It works");
});

чтобы:

$(document).ready(function() {
  $('#select-product-in-persomodel_form').change(function() {
    alert("Updating the variants selector for Anacondano");
    $("#persomodels-variant-select").html(" <%= escape_javascript(render 'variant_select') %>");
  });
});

Предостережение: Я предполагаю, что одно приложение Rails может содержать несколько записей $(document).ready. Это вопрос, который мне еще нужно проверить. Вход приветствуется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню