Как получить значение из обработчика в другую часть скрипта
Здравствуйте!
Пишу для своего профильного форума конструктор, который будет генерировать сниппеты. Конструктор собирает данные у пользователя, упрощая ему постановку вопроса и значительно экономя время. Через position:sticky выводится макет с предпросмотром получаемых данных - макет чем то похож на карточку товара (изображение, размеры и др. нужные данные). С предпросмотром у меня проблем нет - через обработчики событий он у меня работает как надо. У меня проблема с генерацией сниппета. Я не знаю как в него получать данные из обработчиков. Внизу HTML-кода есть input id="snipCode" - это поле вывода сгенерированного сниппета. Я код максимально укоротил, чтобы огромнейшую портянку не вставлять, а макет даю чтобы донести суть своего вопроса. <div class="constructor"> <div> <h3>Название:</h3> <input type="text" class="nameSnip" id="nameSnip" placeholder="Введите название проекта"><button class="btn-danger" id="nameDelete" title="Удалить название">X</button> </div> <div class="typeKr"> <h3>Тип крыши:</h3> <div class="btn-group" data-toggle="buttons"> <label class="btn"><input type="radio" name="typeKr" value="1" checked>Односкатная</label> <label class="btn"><input type="radio" name="typeKr" value="2">Двускатная</label> <label class="btn"><input type="radio" name="typeKr" value="3">Шатровая</label> </div> </div> <div class="uteplitel"> <h3>Утепление:</h3> <div class="btn-group" data-toggle="buttons"> <label class="btn"><input type="radio" name="uteplitel" value="1" checked>Холодная крыша</label> <label class="btn"><input type="radio" name="uteplitel" value="2">Тёплая крыша</label> </div> </div> <div> ... </div> <!-- Снипет --> <div class="snip"> <span>Код для вставки:</span> <input id="snipCode" type="text" class="" placeholder="Код для вставки на форум" value=""> </div> </div> В общем идёт сбор данных через радио-кнопки, инпуты и селекты. В скрипте у меня получилось написать обработчики, которые дают результат в предпросмотр. А вот как получить данные из обработчиков в новые переменные я не могу найти решения. Вот часть скрипта, где нужно результат из $('.name').keyup(function() получить в переменную nameSnip чтобы при изменении данных эти изменения происходили не только в макете предпросмотра, но и в коде сниппета $(function() { var name = $('.nameSnip'); //Название $('.nameSnip').keyup(function() { $("#prosmotpName").text($(this).val()); }); $('#snipCode').click( function(){ //Выделение кода сниппета при клике в поле this.select() }); //Код cниппета var nameSnip; var snipCode = '[snip ' + nameSnip + typeKr + sizeA + sizeB + ' snip]'; $("#snipCode").val(snipCode);//Вывод сниппета }); |
MC-XOBAHCK, непонятно в чем возникла сложность.
Почитай тут, может решишь вопрос: https://learn.javascript.ru/closures#вложенные-функции $(function() { var name = $('.nameSnip'); //Название var nameSnip; var snipCode=''; $('.name').keyup(function() { *!* nameSnip=$(this).val(); $("#prosmotpName").text(nameSnip); */!* }); $('#snipCode').click( function(){ //Выделение кода сниппета при клике в поле this.select() }); //Код cниппета $("#snipCode").val(snipCode='[snip ' + nameSnip + typeKr + sizeA + sizeB + ' snip]');//Вывод сниппета }); |
Спасибо, но так не получается.
В макет предпросмотра уходят правильные данные, а вот в код сниппета nameSnip отдаёт undefined |
MC-XOBAHCK, может тогда так сделать?
$("#snipCode").val(snipCode='[snip ' + $('.name').val() + typeKr + sizeA + sizeB + ' snip]') |
В таком варианте пусто вместо значения. Пишу название - ни каких изменений - в макет выводит, в код сниппета нет.
Прописываю console.log ($('.name').val()); - выводит пустоту. На ввод названия (заполнение поле от куда берутся эти данные) никак не реагирует. |
|
Извиняюсь, класс nameSnip. Это я через переменную к этому классу назначил.
Но я у себя правильно назначил класс, просто применил предложенную логику. А классы расставил правильно. Сейчас в топике исправлю. |
var name = $('#nameSnip'); //Название var nameSnip=''; name.keyup(function() { nameSnip=$(this).val(); $("#prosmotpName").text(nameSnip); $("#snipCode").val(nameSnip); }); $("#snipCode").val(nameSnip); Я такой скрипт понимаю как писать и что он делает. Он перепишет полностью value на значение nameSnip. Дело в том что у меня несколько обработчиков (keyup, click, change). По сути они однотипные и поэтому я для вопроса оставил только keyup (Ввод названия). А в конечном результате мне нужно в коде сниппета получить не только значение nameSnip, а и другие переменные (typeKr, sizeA, sizeB) , которые берутся из событий похожих на name.keyup(function() //Код cниппета var nameSnip; var snipCode = '[snip ' + nameSnip + typeKr + sizeA + sizeB + ' snip]'; $("#snipCode").val(snipCode);//Вывод сниппета Я typeKr, sizeA, sizeB намеренно убрал из кода, чтобы не тянуть портянку. Там у меня ещё много переменных. Мне бы на примере nameSnip понять как правильно писать скрипт, чтобы получать данные в код сниппета и чтобы при изменении данных они изменялись и в коде сниппета. |
MC-XOBAHCK, "snipCode" в моем коде замени на то, что нужно и все.
|
Цитата:
В карму не могу поставить плюс, пишет "Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Nexus". Может кто подскажет как получить значение из обработчика в другую часть скрипта - буду признателен за науку. |
Часовой пояс GMT +3, время: 12:37. |