Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Открыть новую тему     Написать ответ в эту тему

Sanatory



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
Ребята, есть строка вида:

Цитата:
/data/238/a70f.php?sign=99&name=kod&number=941e63c5208c2f342e10ed

 
Есть объект вида:

Код:
obj = {
    type: 'data',
    name: 'kod',
    id: 238,
    number: '941e63c5208c2f342e10ed',
    sign: 99,
    page: 'a70f.php'
}

 
Как вы заметили, параметры из строки присутствуют в виде свойств и соответствующих значений в объекте. Но не следуют тому поряду, в котором встречаются в строке.
 
 
Итого: есть массив строк, сформированных по тому же шаблону, что и первая. Мне надо создать для каждой строки объект по образцу первого. Я теперь ломаю голову, как это реализовать.
 
Можно создать регулярное выражение вида:

Код:
^\/(\w+)\/(\d+)\/(.+.php)\?sign=(\d+)&name=(\w+)&number=(.+)$

 
С его помощью я могу извлечь значения из строки:
1.    data
2.    238
3.    a70f.php
4.    99
5.    kod
6.    941e63c5208c2f342e10ed
 
Но как объяснить объекту, что для первого свойства (type) надо брать первое же совпадение из регулярки, а для второго по счёту свойства (name) - пятое совпадение из регулярки??
 
Чёт здесь мыслЯ забуксовала, так что решил воззвать к колекктивному разуму.  
Помогите начинающему JavaScript-еру, пожалуйста.

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 19:12 27-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sanatory
Порядок свойств в объекте роли не играет. Поэтому можете назначать в том порядке, в каком идёт в url. Вот только что если get параметры будут переставлены - их порядок тоже не важен.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 19:24 27-07-2018
Sanatory



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу пардону: весь день "шкодничал", так что некорректно сформулировал певоначальное ТЗ.
Дело в том, что объект-образец может изменяться, равно как шаблон составления параметров строки.
Самое главное, о чём забыл написать: имена свойств в объекте НЕ совпадают с параметрами из строки!
Например, первая партия строк и соответствующий объект могут быть, как я описал выше. Следующая партия может иметь такой, предположим, вид:
строка:

Цитата:
/data/238/a70f.php?sign=99&name=kod&first_number=941e63c5208c2f342e10ed&second_number=941

 
объект:

Код:
obj = {
    this_type: 'data',
    this_name: 'kod',
    para: 238,
    first_number: '941e63c5208c2f342e10ed',
    number_of_sign: 99,
    another_number: 941,
    site: 'a70f.php'
}

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 19:28 27-07-2018 | Исправлено: Sanatory, 19:35 27-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sanatory

Цитата:
имена свойств в объекте НЕ совпадают с параметрами из строки!  

тогда никак, кроме как создавая отдельное сопоставление между возможными параметрами (именами или хотя бы типами) строки и свойствами объекта.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 19:45 27-07-2018 | Исправлено: Mavrikii, 19:46 27-07-2018
Sanatory



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
тогда никак, кроме как создавая отдельное сопоставление между возможными параметрами (или хотя бы типами) строки и свойствами объекта.  

Вот мне тоже так кажется.
Надеялся, в запасниках у профи есть волшебная функция для подобного случая...

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 19:48 27-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sanatory

Цитата:
есть волшебная функция для подобного случая.

пропарсить строку и получить GET аргументы не так сложно. но вот чтобы напрямую увязать аргумент1 и параметр1, когда могут быть похожего типа, но с разными ключами, для этого нужен искусственный интеллект, да и то данное соответствие не всегда очевидно.
либо вы снова что то не так формулируете

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 19:51 27-07-2018 | Исправлено: Mavrikii, 19:52 27-07-2018
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как с помощью JS сделать вызов функции при нажатии клавиши "c/C" лат. + mouse Left doubleclick ?
 
заранее спасибо
 
Добавлено:
без jQuery

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 06:08 30-07-2018 | Исправлено: vs6262, 06:09 30-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
JS сделать вызов функции при нажатии клавиши "c/C" лат. + mouse Left doubleclick ?

определить флаг, который показывает, что нажата нужная клавиша. повесить обработчик события нажатия клавиши (keydown), отпускания (keyup) и клика. если сработал клик, а клавиша не нажата - пропустить, если клавиша нажата и нужная, то выставить флаг, тогда при обработке клика делаем что нужно. после отпускания клавиши снять флаг и клик снова не будет срабатывать.
работать будет, ессно, только когда у окна с обработчиками есть фокус.
 
ps: но скорее всего не судьба, потому что слишком много хотите от js. по тесту - если держать нажатой клавишу, то события  клика не вызываются.  
 
хотя, это у меня тачпад что то странно на ноуте себя ведет. вот

Код:
var doc = document, flag = false;
doc.addEventListener('keydown', function(e) {
   var code = window.event ? e.keyCode : e.which;
   flag = String.fromCharCode(code).toLowerCase() == 'c';
});
doc.addEventListener('keyup', function() {
   flags = false;
});
doc.addEventListener('dblclick', function() {
   if (flag) console.log('c + dbl click');
});

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 06:17 30-07-2018 | Исправлено: Mavrikii, 06:53 30-07-2018
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
<script>
  window.addEventListener("keydown", event => {
    if (event.key == "c" || event.key == "C") {
     // document.body.style.background = "violet";
     window.addEventListener("dblclick", function(){ document.body.style.background = "violet"; }, false);
    }
  });
  window.addEventListener("keyup", event => {
    if (event.key == "c" || event.key == "C") {
      document.body.style.background = "";
       
      window.removeEventListener("dblclick", function(){ document.body.style.background = "violet"; }, false);
       
    }
  });
</script>

что то removeEventListener() не работает

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 07:08 30-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
что то removeEventListener() не работает

зачем?? и для remove нужно указывать именно ту функцию, что использовалась для add, а не анонимный вариант. хоть они и написаны одинаково, но с точки зрения интерпретатора это разные функции.
 
более того, вы повесите браузер, потому что keydown, при нажатой клавише, будет срабатывать очень много раз, повесите много обработчиков клика.
 
и это
Цитата:
event.key == "c" || event.key == "C"
можно написать всего лишь в виде
Код:
event.key.toLowerCase() == 'c'

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 07:10 30-07-2018 | Исправлено: Mavrikii, 07:14 30-07-2018
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот так работает
 

Цитата:
более того, вы повесите браузер, потому что keydown, при нажатой клавише, будет срабатывать очень много раз, повесите много обработчиков клика.

а как обойти?
 
Добавлено:

Цитата:
event.key.toLowerCase() == 'c'  

это исправлю

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 07:23 30-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
а как обойти?

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

Цитата:
If multiple identical EventListeners are registered on the same EventTarget with the same parameters, the duplicate instances are discarded. They do not cause the EventListener to be called twice, and since the duplicates are discarded, they do not need to be removed manually with the removeEventListener method.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 07:25 30-07-2018
Ghost Inets1

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Где бы найти браузер в Сети, для запуска скриптов?

Всего записей: 1854 | Зарегистр. 30-03-2016 | Отправлено: 17:25 31-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ghost Inets1

Цитата:
браузер в Сети, для запуска скриптов

А подробнее?

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 17:44 31-07-2018
Ghost Inets1

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо запустить виртуальную машину на сервере. Чтобы там браузер был.

Всего записей: 1854 | Зарегистр. 30-03-2016 | Отправлено: 17:55 31-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ghost Inets1
И какое это имеет отношение к javascript?
Создаете виртуальную машину, ставите в нее поддерживаемую гостевую ОС, используете в ней браузер.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 18:07 31-07-2018
Ghost Inets1

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А на каком сайте такое возможно? У меня при запуске этих скриптов на домашнем ноуте он тихо умирает.

Всего записей: 1854 | Зарегистр. 30-03-2016 | Отправлено: 18:41 31-07-2018 | Исправлено: Ghost Inets1, 18:42 31-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ghost Inets1

Цитата:
У меня при запуске этих скриптов

"этих" - каких? js скрипты не должны грузить компьютер/ноутбук до такой степени.
только на сайтах вебмастеров, желающих заработать "кучу" денег и напихивающих везде рекламу. и тогда можно частично это побороть - Блокировка рекламы в браузере (часть 3). отключите js в браузере, потеряете часть функциональности, но сможете читать.
 
или сервисы удаленного рабочего стола (не бесплатно) - https://habr.com/post/343858/
или тогда через анонимайзеры и аналогичные сервисы - они вырезают многое. но вопрос для не для темы и даже не для раздела.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 18:45 31-07-2018 | Исправлено: Mavrikii, 18:47 31-07-2018
vworld



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
решаю задачу отправки с платы Nodemcu с поднятым веб сервером и точкой доступа через веб страницу текста на светодиодную матрицу 8*8
нашел [url]готовое решение[/url]
 
но веб страница не отображается как должна
 
с ESP8266 NodeMCU не подгрузились стили, хотя инет точно был
решил перепроверить как отрабатывает веб страница, создал отдельно файл *.html Вот такой код получился

Код:
 
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Send Text to ESP-01 / NeoMatrix / v2</title>
<link rel="stylesheet" href="<a href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootst.." rel="nofollow">https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootst..</a>" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
 
<link rel="stylesheet" type="text/css" href="<a href="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectru.." rel="nofollow">https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectru..</a>">
<style>#sentMsgs{display:inline-block;margin:0 15px 20px;padding:10px 20px;min-height:60px;background-color:#777;color:lime;border:1px solid gray;clear:both;}.adjust-text{margin:20px 0 0;padding:0 20px;}.clearfix{clear:both;}</style>
</head>
<body style="background:#EFEFEF;">
 
<form>
<div class="col-md-4">
<h3>Enter Text to Send on the NeoPixel Matrix: <input type="text" id="color-picker"></h3>
<div class="input-group">
<input type="text" name="line" id="line" class="form-control" maxlength='60'>
<div class="input-group-btn">
<button class="btn btn-default" id="send-text">Send Text</button>
</div>
</div>
</div>
</form><br>
<div class="col-md-4 adjust-text clearfix"><h4>Messages Sent</h4></div>
<div id="sentMsgs" class="col-md-4" contentEditable="true"></div>
 
<script src="<a href="https://code.jquery.com/jquery-3.3.1.slim.min.js" rel="nofollow">https://code.jquery.com/jquery-3.3.1.slim.min.js</a>" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="<a href="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/p.." rel="nofollow">https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/p..</a>" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="<a href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstr.." rel="nofollow">https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstr..</a>" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="<a href="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectru.." rel="nofollow">https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectru..</a>"></script>
 
<script>
 
function sendMsg(){
var line = $('#line');
var color = '';
var colorPicker = $('#color-picker');
var msg = line.val().replace(';','');
if(colorPicker.val() == ''){ color = '&rgb=80,255,0'; }
else{ color = '&'+colorPicker.val().replace('(','=').replace(/\\)| /g,''); }
 
var url2Send = '/?line='+msg+color;
line.val('');
if(typeof msg !== 'undefined' && msg.trim() !== ''){
$.ajax({ url: url2Send }).done(function(){ $('#sentMsgs').prepend('Message Sent: '+msg+'<br>\\n\'); console.log('Message Sent: '+msg+' ['+color+']'); });
}
}
$(document).keypress(function(e){ if(e.which === 13){ sendMsg(); e.preventDefault(); } });
$('#send-text').click(function(e){ sendMsg(); e.preventDefault(); });
$('#color-picker').spectrum({preferredFormat:'rgb',clickoutFiresChange:true,color:'#50FF00'});
</script>
 
</body>
</html>
 

но всё равно не отрабатывает по стилям и скрипту
 
но если вывести строку вот так

Код:
 
<script
$('#color-picker').spectrum({preferredFormat:'rgb',clickoutFiresChange:true,color:'#50FF00'});
</script>
 

то появляется выбор цвета
 
Что-то не так явно со скриптом

Всего записей: 2617 | Зарегистр. 13-02-2003 | Отправлено: 15:06 18-09-2018
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но веб страница не отображается как должна

Попробуйте проверить код на наличие ошибок - https://validator.w3.org/#validate_by_input

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 15:57 18-09-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru