Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как элементам массива назначить переменные? (https://javascript.ru/forum/events/75087-kak-ehlementam-massiva-naznachit-peremennye.html)

vospa 01.09.2018 18:31

Как элементам массива назначить переменные?
 
Доброго времени суток, уважаемая аудитория!
Прошу помощи, в связи с очень плохим знанием скриптов.

Есть кнопка в панели расширения для Photoshop, которая запускает .jsx
<button class="tool" id="gb_3b">MyFunc</button>

Нажатие кнопки запускает нужный .jsx из js. В данном случае gb3b.jsx
$("#gb_3b").button().click(function(a) {
    csInterface.evalScript('$.evalFile("' + extensionRoot + 'work/gb3b.jsx")')
});

Мне нужно передать переменную из jsx в js.
В самом конце jsx помещаю функцию
function func_in_jsx() {
	var rm = r2;
	return rm;
};

А в js добавляю:
$("#gb_3b").button().click(function(a) {
    csInterface.evalScript('$.evalFile("' + extensionRoot + 'work/gb3b.jsx"); func_in_jsx();', function f(x) {var rad_m = x; $('#gblur3rad').slider("value", rad_m);};
});

В случае передачи одной переменной, все замечательно работает. Скрипт jsx отрабатывает все что положено в Photoshop и по завершении, ползунок в панели сдвигается соответственно значению возвращенной переменной.
А вот в случае, когда нужно вернуть несколько переменных, у меня стопор. Не знаю, как это правильно записать.

В jsx меняю функцию на:
function func_in_jsx() {
	var rl = r1;
	var rm = r2;
	return [rl, rm];
};

А вот как это записать правильно в js не знаю. Пробовал по всякому. Никак. Алерт показывает, что вернулось 2 значения, а вот присвоить их переменным не знаю как.
$("#gb_3b").button().click(function(a) {
    csInterface.evalScript('$.evalFile("' + extensionRoot + 'work/gb3b.jsx"); func_in_jsx();', function f(x) {var y = [x]; var rad_m = y[1]; var rad_l = y[0]; $('#gblur3rad').slider("value", rad_m); $('#lowgblur3rad').slider("value", rad_l);};
});

Заранее благодарю за любую помощь

Rise 01.09.2018 20:53

Наверно так:
var rad_m = x[1]; var rad_l = x[0];

vospa 01.09.2018 22:34

Цитата:

Сообщение от Rise (Сообщение 493787)
Наверно так:
var rad_m = x[1]; var rad_l = x[0];

Пробовал это самым первым. Не получается. Если к этой записи добавить: alert (x), то как и положено показывает 2 правильных значения. А вот если такой добавить: alert (rad_l+rad_m), то какой-то бред. Показывает значение rad_l, которое почему-то в 10 раз меньше, чем должно быть и rad_m всегда равное 0. А ползунки, соответственно, один выставляется с этим (меньшим в 10 раз) значением, а другой уходит в крайнее левое положение.
При всем при этом, если только одна переменная возвращается, без массива, то все работает правильно.

P.S. Фуф, понял я почему так получается. Возвращается не числовой массив, а строка. Например: 12.3,4.5
Только вот как такой массив сделать снова числовым?

Rise 01.09.2018 22:44

Цитата:

Сообщение от vospa
показывает 2 правильных значения

В какой виде показывает?

vospa 02.09.2018 00:41

Цитата:

Сообщение от Rise (Сообщение 493793)
В какой виде показывает?

Я выше написал. К примеру, так: 12.3,4.5 Но это он оказывается показывает строку, а не 2 числа. А вот как назад в 2 числа это собрать?

Все, разобрался.
var arr = x.split(','); var rad_l = arr[0]; var rad_m = arr[1];

Но все равно, большое спасибо. Без Вас бы так и тыкался, придумывая невесь что :-)


Часовой пояс GMT +3, время: 08:27.