Приветствую Сообщество,
Я хочу изменить тег 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 = "разработка"?
С уважением !
Вам нужно обернуть ваш код 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()
без забот, они будут исполняться в порядке их вызовов. См. Также здесь.
У вас может быть несколько, но это не всегда самая сложная вещь. Старайтесь не злоупотреблять ими, так как это серьезно повлияет на читаемость. Кроме этого, это совершенно законно. См. Ниже:
Как мы можем:
$(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()
Я нашел решение: код 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
. Это вопрос, который мне еще нужно проверить. Вход приветствуется.