Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Подскажите как менять массивы в формуле

есть такой код:

var p= document.getElementsByTagName('p');
var b= document.getElementsByTagName('b');

function en() {
di.innerHTML=p[arr1[list]].innerHTML;}

В зависимости от того какой массив arr пользователь выберет из выпадающего списка select, с тем программа и должна работать

я думал можно сделать типа так
var MAS= IDselect.value;
function en() {
di.innerHTML=p[MAS[list]].innerHTML;}

Но не выходит.

Подскажите, пожалуйста, "на пальцах" - я еще достаточно плохо знаю JS
Ответ: Sergius182,
информации недостаточно.
function mas() {
 var e = document.getElementById("mas");
 var t = e.value;
 return window[t]
 };
Вопрос: Не передаётся массив в функцию

Всем привет! Народ, вот такая вот проблема. Нужно чтобы при редактировании ячейки в Google-таблице срабатывала функция.

Я передаю в качестве параметра функции - двумерный массив, но вот почему то 2-ю размерность массива функция ну ни в какую воспринимать не хочет Подскажите, что не так?

Ссылка на Google-таблицу:

Скрипт:
function onEdit(event){
  
var ss=SpreadsheetApp.getActiveSpreadsheet();//Получили активный документ (активную таблицу)
var sheet = ss.getActiveSheet();//получаем активный лист,например "Отправили КП", "В работе", и т.д. Из ячеек активного листа
//данные надо копировать на лист "Данные"

//Получаем активную (редактируемую) ячейку
 var range=SpreadsheetApp.getActiveRange();//Изменяемая ячейка
 var curRow=range.getRowIndex();//Текущий номер строки
 var curCol=range.getColumn();//Текущий номер столбца
  
 var arr = new Array(1000);//Массив из 1000 строк - туда сохраняем данные строки
 var range;// = sheet.getRange(1,1); 
 var count=0;
 
 var i=6;//Данные начинаются с 6-й строки, поэтому просмотр начинаем с 6. Как только строка пустая - останавливаем счёт
 //Это нужно для того, чтобы знать, сколько строк выделять под массив. Столбцов будет около 17-19 (по наибольшей таблице)
 
 while(i<1000 && sheet.getRange(i,2).getValue()!="")
 {
     count++;
     i++;
 }
 
 //range=sheet.getRange(1,1).setValue(count);
 
 for(var k=0;k<count;k++)
 {
     arr[k]=new Array(18);//В кажой строке 16 столбцов. Всего count строк
     for(var i=0;i<19; i++)
     {
         range=sheet.getRange(6,i+1);
         var data = range.getValue();
         arr[k][i]=data;
         //sheet.getRange(2,i+1).setValue(arr[k][i]);//Вывод массива в ячейки для тестирования
     }
  }

//sheet.getRange(1,1).setValue(findInColumn("B",15));
//sheet.getRange(1,1).setValue(arr[0][1]);

record_in_table(arr);


}


//Передаём в функцию наш заполненный массив.
function record_in_table(arr)
{


  var ss=SpreadsheetApp.getActiveSpreadsheet();//Получили активный документ (активную таблицу)
  //Копируем данные из "Отправили КП" в "Данные"
  
  
  var sheet = ss.getSheetByName("Данные");//получаем лист по его названию,например "Данные", "Отправили КП", "В работе"
  
  //Теперь надо определить, в какую именно строку заносить данные
  //Надо взять из массива значение arr[0][1], arr[1][1], arr[2][1] и т.д. - это значения индексов, в по этим индексам вставлять в таблицу "Данные"
  //все остальные значения
  
  //var index=arr[0][1];
  
  //Теперь во вкладке "Данные" надо найти этот индекс, таким образом мы определим, какую строку надо обновить
  
  //var columnValues=sheet.getRange("A1:A20");//По мере заполнения таблицы диапазон будет меняться
  
  
  
  for(var j=0; j<arr.length; j++)
  {
    var index=findInColumn("A",arr[j][1]);//Если вернулось какое то значение - значит идёт обновление данных,
    //если вернулось "-1", значит будет добавление данных в лист "Данные", т.е. добавление полностью новой строки
  
    if(index!=-1)
    {
    
    var range=sheet.getRange(index,3).setValue(arr[j][2]);//Дата поступления
        range=sheet.getRange(index,6).setValue(arr[j][5]);//Название компании
        range=sheet.getRange(index,8).setValue(arr[j][10]);//Комментарий
        range=sheet.getRange(index,12).setValue(arr[j][9]);//Первичный запрос
        range=sheet.getRange(index,14).setValue(arr[j][11]);//Телефон
        range=sheet.getRange(index,16).setValue(arr[j][6]);//Контактное лицо
        range=sheet.getRange(index,17).setValue(arr[j][7]);//Должность контактного лица
        range=sheet.getRange(index,18).setValue(arr[j][8]);//Имя директора
        range=sheet.getRange(index,20).setValue(arr[j][13]);//Ожидаемая сумма сделки
        range=sheet.getRange(index,21).setValue(arr[j][14]);//Реальная сумма сделки
        range=sheet.getRange(index,22).setValue(arr[j][15]);//Стратегия на пол года
        range=sheet.getRange(index,23).setValue(arr[j][16]);//Дата оплаты
     }
     else
     {
       //Тут надо вызвать функцию добавления новой строки в лист "Данные" из массива arr[][]
       //AddrRow(arr);
     }
   
   }//for
   

}


function AddRow(arr)
{
  var ss=SpreadsheetApp.getActiveSpreadsheet();//Получили активный документ (активную таблицу)
  //Копируем данные из "Отправили КП" в "Данные"
  var sheet = ss.getSheetByName("Данные");//получаем лист по его названию,например "Данные", "Отправили КП", "В работе"
  
  //Ищем индекс строки для вставки - это первая свободная строка таблицы "Данные"
  var index=1;
  while(index<=1000 && sheet.getRange(index,3).getValue()!="")
    index++;
    
  var range=sheet.getRange(index,3).setValue(arr[0][2]);//Дата поступления
      range=sheet.getRange(index,6).setValue(arr[0][5]);//Название компании
      range=sheet.getRange(index,8).setValue(arr[0][10]);//Комментарий
      range=sheet.getRange(index,12).setValue(arr[0][9]);//Первичный запрос
      range=sheet.getRange(index,14).setValue(arr[0][11]);//Телефон
      range=sheet.getRange(index,16).setValue(arr[0][6]);//Контактное лицо
      range=sheet.getRange(index,17).setValue(arr[0][7]);//Должность контактного лица
      range=sheet.getRange(index,18).setValue(arr[0][8]);//Имя директора
      range=sheet.getRange(index,20).setValue(arr[0][13]);//Ожидаемая сумма сделки
      range=sheet.getRange(index,21).setValue(arr[0][14]);//Реальная сумма сделки
      range=sheet.getRange(index,22).setValue(arr[0][15]);//Стратегия на пол года
      range=sheet.getRange(index,23).setValue(arr[0][16]);//Дата оплаты
  
  
}


//Функция ищет позицию данных data в указанном столбце column, и возвращает индекс той строки, где встретились указанные данные data
function findInColumn(column, data) {
 
  var ss  = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Данные");
  
  
  var column = sheet.getRange(column + ":" + column);  // like A:A
  
  var values = column.getValues(); //Получаем все значения столбца column
  var row = 0;
  
  while ( values[row] && values[row][0] !== data ) {
    row++;
  }
  
  if (values[row][0] === data) 
    return row+1;
  else 
    return -1;
    
}


Триггеры настроил на изменение таблицы.
Ошибка вылазиет вот тут:

var index=findInColumn("A",arr[j][1]);

Google-script пишет TypeError: Не удается прочитать свойство "1" объекта undefined. (строка 73, файл Код)

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

Как это у Гугла реализовано не знаю - это к документации Гугла.
А в jQuery например .
Вопрос: регулярка или формула

добрый вечер всем! вопрос такого плана, есть строка вари1234;45 есть код:

CODE (javascript):

  1.  
  2. str="вари1234;45";
  3. arr=str.split(';');
  4. res= parseInt(arr[1])+5;
  5.  

как получить результат в одну формулу без лишних присваиваний, либо второй вариант может кто подскажет регуляркой достать сразу число 45 тоесть после этого символа ;
спасибо

(Отредактировано автором: 29 Марта, 2016 - 20:53:39)

Ответ:
Tyoma5891, с чего бы это? Если метод возвращает массив, то что мешает обращатся к элементам результата?
Вопрос: Замена значений массива

Привет всем!
Есть массив
baseThemeColors=['ffffff','000000','eeece1','1f497d','4f81bd','c0504d','9bbb59','8064a2','4bacc6','f79646'],


Помогите написать функцию, которая будет менять значения на названия цветов (белый, черный) и т.д.
Ответ:
Сообщение от рони Посмотреть сообщение
dmitriy94,
а если в baseThemeColors -- значения поменять местами?
Соответственно и во втором придется менять. Автор задал вопрос, я на него ответил. Если он не устроил, пусть задает вопрос конкретней, для чего нужно менять их местами. Здесь, насколько я знаю, телепатов нет.
Вопрос: Подскажите как записать массив в базу мусол.

Подскажите как записать массив в базу мусол. Одной строчкой. Спс.
Ответ: wadim, Вы ошиблись разделом.

Изменять данные в таблице можно с помощью конструкции UPDATE. Вот пример процедуры, которая меняет данные.

CREATE DEFINER = 'root'@'localhost'
PROCEDURE myDataBase.myProcedure(IN id INT, IN x INT, IN y INT)
BEGIN
  UPDATE myTable t
  SET `x` = x, `y` = y
  WHERE t.id = id;
END


Запуск:
call myDataBase.myProcedure(2, 10, 20);
Вопрос: Можно ли заменить путь к папке на элементы массива?

Подскажите, есть ли какая-то возможность изменить путь к папке с картинками в скрипте на массив PHP:
<script type="text/javascript">
    window.onload = init;

    var product;
    function init(){

      car = $('.product1').ThreeSixty({
        totalFrames: 10,
        endFrame: 50,
        currentFrame: 1,
        imgList: '.threesixty_images',
        progress: '.spinner',
        imagePath:'http://site.com/files/products/',
        filePrefix: '',
        ext: '.png',
        height: 400,
        width: 400
      });

      $('.custom_previous').bind('click', function(e) {
        car.previous();
      });

      $('.custom_next').bind('click', function(e) {
        car.next();
      });

      $('.custom_play').bind('click', function(e) {
        car.play();
      });

      $('.custom_stop').bind('click', function(e) {
        car.stop();
      });
    }


Путь к папке в скрипте: imagePath:'http://site.com/files/products/',
Массив PHP:
{foreach $product->images}
<img src="{$image->filename|resize:500:500}"/>
{/foreach}
Ответ:
Сообщение от Rise
wolf329, а зачем менять путь?
Для динамической загрузки фото конкретного товара интернет-магазина. А в папке находятся все фото продукции сайта.
Вопрос: Как поместить изображения в массив для дальнейшего вывода на страницу?

Добрейший вечерочек! Есть мини-проект, рандомный выбор студента, который пойдет отвечать. Есть массив с именами, есть папка с картинками. Нужно собрать из папки картинки в массив, ну и с помощью рандомного числа их выводить. Например, нажал пользователь на кнопку, а он выводит имя ученика и его фото(из массивов). Так вот, не знаю, как их туда собрать(в силу определенных условий PHP, MySQL и прочая работа с сервером не подходит) Есть идеи?
Используем javascript and jQuery.
Ответ: я проверил статистику
Javascript
1
2
3
stat = [0,0,0,0,0,0,0,0,0,0];
for(var i=0; i<10000; i++) stat[ Math.floor(Math.random() * (10-0.0001) ) ] += 1;
console.log(stat);
вышло
[1022, 1068, 994, 977, 981, 955, 983, 956, 1012, 1052]
т.е. равномерно, и формулу подправил малехо, а то если 0 выпадет отрицательное число получалось, теперь все в порядке.

Добавлено через 1 минуту
Javascript
1
2
3
var mas = ['vasua.jpg', 'petia.jpg', 'kolia.jpg'];
var roll = Math.floor(Math.random() * (mas.length-0.0001));
$('#Img_id').attr('src',mas[roll]);
Вопрос: Отображение математической формулы, вводимой в textarea

Задача: есть поле textarea, куда вводится некоторая формула в latex. Нужно, чтобы по мере ввода она отображалась в другом поле в виде формулы. Использую mathjax. Пишу такой код:

<textarea id="uslenter"></textarea>

<div id="usldisplay"></div>

<script type="text/javascript">
$(function(){
$("#uslenter").keyup(function(){
var value = $(this).val();
$("#usldisplay").html(value);
}).keyup();
});
</script>

Не работает. Формула отображается в виде простого текста. См. рисунок 1.

Если ту же формулу добавляю в исходный скрипт, т.е. вместо $(this).val(); пишу $(this).val()+'\\(\\sqrt5\\)'; то вначале, при загрузке страницы, всё отображается правильно (рисунок 2).

Но при нажатии любой клавиши с клавиатуры формула портится (рис.3).

Как я понимаю, mathjax однократно обрабатывает все формулы при загрузке страницы, и дальше при их изменении уже не реагирует.
Собственно вопрос - как решить проблему.
Ответ: Отлично, почти то, что нужно. А можно как-нибудь сделать, чтобы формулы читались вместе со своим окружением \( \)? Идея в том, что в окошке будет набираться полноценный математический текст (условие задачи), в который будут включены формулы. Нужно, чтобы этот текст на ходу проверялся на корректность. Затем он будет напрямую вставляться в php-файл и отображаться на сайте. Потому набирать его нужно вместе с окружениями.

Пытаюсь разобрать код той ссылки, что вы дали. Там окружение присутствует следующим образом:

<div class="box" id="box">
<div class="output">\( \)</div>
</div>
(я сам исправил $$ на \( \), мне так удобнее).

Но на итоговой странице окружение \( \) не отображается, не пойму почему. А если его убрать, вообще не работает.

Если простого решения нет, пойду читать mathjax api. Но вдруг можно быстро...

Добавлено через 3 часа 40 минут
Разобрался. Всего одна строчка MathJax.Hub.Queue(["Typeset",MathJax.Hub]); добавленная в keyup, решила проблему.
Вопрос: формула расчета градиента

Здравствуйте!
Не подскажите как узнать или где посмотреть формулы расчета градиента. Нарпример имеется два цвета #000000 и #ff0000 как можно высчитать все промежуточные цвета от черного до красного.
Заранее большое спасибо!
Ответ: Подскажите как можно высчитать градиент для блока, нужно чтобы сверху была градиентная полоска, черный-белый высотой 10 пикселей, и внизу белый-черный тоже 10 пикселей, а между ними просто белый цвет, если общая высота блока резиновая, зависит от длины текста... ?
Вопрос: Вывод из формы HTML строчного массива

HTML (фрагмент)

Код HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="block_02">
    Выберете режисёра<br><br>
    select name="producer[]" size="10" multiple>
    <option selected value="any"> Любой
 
    <?php                   
        for($i=0;$i<$val_prod;$i++)
        {
                echo '<option value='.$producer_form[$i].'>'. $producer_form[$i];
        }
    ?>  
 
    </select><br>
Должен передавать в виде массива имена в скрипт. Но передаёт только первое слово. т.е. вместо "Фёдор Бондарчук" передаст только "Фёдор" и далее следующий элемент массива. В самой форме отображается правильно.

Думаю этот фрагмент считывает строку до пробела в массиве: select name="producer[]" size="10" multiple>

Как сделать, что бы считывал всю строку включая пробел?
Ответ: Перед select поставьте "<". option – парный тег. Значение тега option нужно взять в кавычки:
Код PHP
1
echo '<option value="'.$producer_form[$i].'">'. $producer_form[$i].'</option>';
Кстати, в качестве значения тега option можете передавать значение счетчика $i, а потом делать обратное преобразование (менять индекс элемента массива на его значение).