Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2017, 12:48
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Как получить значение из обработчика в другую часть скрипта
Здравствуйте!

Пишу для своего профильного форума конструктор, который будет генерировать сниппеты.
Конструктор собирает данные у пользователя, упрощая ему постановку вопроса и значительно экономя время.
Через 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, 04.10.2017 в 15:37.
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2017, 12:51
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

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]');//Вывод сниппета
});

Последний раз редактировалось Nexus, 04.10.2017 в 12:55.
Ответить с цитированием
  #3 (permalink)  
Старый 04.10.2017, 13:56
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Спасибо, но так не получается.
В макет предпросмотра уходят правильные данные, а вот в код сниппета nameSnip отдаёт undefined
Ответить с цитированием
  #4 (permalink)  
Старый 04.10.2017, 14:32
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

MC-XOBAHCK, может тогда так сделать?
$("#snipCode").val(snipCode='[snip ' + $('.name').val() + typeKr + sizeA + sizeB + ' snip]')
Ответить с цитированием
  #5 (permalink)  
Старый 04.10.2017, 15:06
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

В таком варианте пусто вместо значения. Пишу название - ни каких изменений - в макет выводит, в код сниппета нет.
Прописываю console.log ($('.name').val()); - выводит пустоту. На ввод названия (заполнение поле от куда берутся эти данные) никак не реагирует.
Ответить с цитированием
  #6 (permalink)  
Старый 04.10.2017, 15:24
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

MC-XOBAHCK, а где у вас в html элемент с классом «name»?

Upd. https://jsfiddle.net/nh6u7uus/

Последний раз редактировалось Nexus, 04.10.2017 в 15:27.
Ответить с цитированием
  #7 (permalink)  
Старый 04.10.2017, 15:36
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Извиняюсь, класс nameSnip. Это я через переменную к этому классу назначил.
Но я у себя правильно назначил класс, просто применил предложенную логику. А классы расставил правильно.
Сейчас в топике исправлю.

Последний раз редактировалось MC-XOBAHCK, 04.10.2017 в 15:40.
Ответить с цитированием
  #8 (permalink)  
Старый 04.10.2017, 16:11
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

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 понять как правильно писать скрипт, чтобы получать данные в код сниппета и чтобы при изменении данных они изменялись и в коде сниппета.
Ответить с цитированием
  #9 (permalink)  
Старый 04.10.2017, 16:26
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

MC-XOBAHCK, "snipCode" в моем коде замени на то, что нужно и все.
Ответить с цитированием
  #10 (permalink)  
Старый 04.10.2017, 16:42
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Nexus
в моем коде замени на то, что нужно и все
Спасибо за желание помочь и извините что отнял ваше время.
В карму не могу поставить плюс, пишет "Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Nexus".

Может кто подскажет как получить значение из обработчика в другую часть скрипта - буду признателен за науку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить значение атрибута checked imedia Элементы интерфейса 1 06.05.2016 16:14
Проблемы с выпадающим списком JavaScript ursus102 Общие вопросы Javascript 0 16.01.2016 19:30
Получить значение из обработчика события mirek Общие вопросы Javascript 16 08.06.2012 23:16
как передать значение из одного скрипта во второй eidicon Общие вопросы Javascript 12 04.05.2012 21:34
Как получить значение переменной из callback функции? Хиросим AJAX и COMET 5 24.04.2012 09:32