Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Текст в Javascript (https://javascript.ru/forum/dom-window/62337-tekst-v-javascript.html)

Sylar V 05.04.2016 19:42

Текст в Javascript
 
Не ругайте за глупый вопрос, я новичек. Перерыл весь форум и Google.
Как писать кириллический текст в JS?
Например, есть переменная:
var a = $('.function').val(),

Как вставить перед ней текст?
Функция: .function

Alexander Belov 05.04.2016 20:08

Sylar V,
Какая задача перед Вами стоит? Ничего не понятно из вопроса.

рони 05.04.2016 20:09

Sylar V,
var a = 'абракадабра'+$('.function').val(),

Sylar V 05.04.2016 20:19

Alexander Belov, Может плохо объяснил, нужно отправить текст, вместе с переменной. Как-то так.

Sylar V 05.04.2016 20:24

рони, А если в массиве несколько функций и каждой нужно по абракадабре?)

рони 05.04.2016 20:36

Sylar V,
вашей информации недостаточно

Sylar V 05.04.2016 20:40

рони, Вот пример:
var a = $('[текст1:].function1 [текст2:].function2').val(),

Это реально?

рони 05.04.2016 21:27

Цитата:

Сообщение от Sylar V
Это реально?

вы не даёте достаточной информации, чтобы вам помочь.

denlem 06.04.2016 00:04

Цитата:

Сообщение от Sylar V (Сообщение 413265)
рони, Вот пример:
var a = $('[текст1:].function1 [текст2:].function2').val(),

Это реально?

Попробуй применить insertBefore
http://api.jquery.com/insertbefore/

Sylar V 06.04.2016 07:00

Я даже не знаю, как объяснить более подробно. Нужно получать текст перед каждой функцией. Может это можно реализовать правильней?
$(function(){
    var a = $.map($('.function1, .function2, .function3'),function(el) {
    return el.value
}) ;
alert(JSON.stringify(a)) ;
})

рони 06.04.2016 08:16

Sylar V,
return str + el.value

Sylar V 06.04.2016 09:54

рони, А можно, пожалуйста, подробнее? Может как-то можно вставить див? Мне нужно получать текст перед значением.
К примеру, чтобы приходило:
Диаметр: значение (.function1)<br />
Масса: значение (.function2)<br />

рони 06.04.2016 10:02

Sylar V,
(непереводимый испанский мат) ... по русски напишите на английском, чего хотите сделать. например html до и после

Sylar V 06.04.2016 10:05

рони,
Вот JS:
$(function(){
    var a = $.map($('.function1, .function2, .function3'),function(el) {
    return el.value
}) ;
alert(JSON.stringify(a)) ;
})


Сейчас данные приходят вот так:
1,2,3
Нужно, чтобы приходили вот так:
Диаметр: 1
Масса: 2
Размер: 3

Я уже не знаю, как объяснить...

Dilettante_Pro 06.04.2016 10:26

Цитата:

Сообщение от Sylar V (Сообщение 413320)
рони,
Вот JS:
$(function(){
    var a = $.map($('.function1, .function2, .function3'),function(el) {
    return el.value
}) ;
alert(JSON.stringify(a)) ;
})


Сейчас данные приходят вот так:
1,2,3
Нужно, чтобы приходили вот так:
Диаметр: 1
Масса: 2
Размер: 3

Я уже не знаю, как объяснить...

Sylar V,
А откуда эти данные берутся? Там, где они находятся, по идее, должны быть и соответствующие слова. Иначе кто знает, что значит какое число?

рони 06.04.2016 10:37

Цитата:

Сообщение от Sylar V
Нужно, чтобы приходили вот так:
Диаметр: 1
Масса: 2
Размер: 3

ок

рони 06.04.2016 10:56

Sylar V,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

  <script>

    $(function() {
        var a = ["Диаметр","Масса","Размер"].reduce(function(b, a, c) {
            b[a] = document.querySelector(".function" + (c + 1)).value;
            return b
        }, {});
        alert(JSON.stringify(a))
    })

  </script>
</head>

<body>
<input type="text" class="function1"  value="1">
<input type="text" class="function2"  value="2">
<input type="text" class="function3"  value="3">
</body>
</html>

рони 06.04.2016 13:08

Sylar V,
document.querySelector([".diametr",".massa",".razmer"][c]).value;

Sylar V 12.04.2016 00:37

рони, Большое спасибо! Все работает, но такой вопрос, стоит мне вписать еще классы, как код не работает. Как сделать 5 значений, чтобы каждое было на новой строчке?

Dilettante_Pro 12.04.2016 13:11

Sylar V,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

   <script>
      $(function () {
              var arr = [];
              $('[class^="function"]').each(function () {
                  arr.push( $(this).attr('name'));
               });
              var a = arr.reduce(function (b, a, c) {
                  b[a] = document.querySelector(".function" + (c + 1)).value;
                  return b
              }, {});
              alert(JSON.stringify(a))
              });
  </script>
</head>

<body>
<input type="text" class="function1" name="Диаметр" value="1">
<input type="text" class="function2" name="Масса" value="2">
<input type="text" class="function3" name="Размер" value="3">
<input type="text" class="function4" name="Материал" value="4">
<input type="text" class="function5" name="Цвет" value="5">
</body>
</html>

рони 12.04.2016 13:28

Dilettante_Pro,
зачем масло масляным делать?

рони 12.04.2016 13:30

на всякий случай
http://api.jquery.com/serialize/

Dilettante_Pro 12.04.2016 13:46

рони,
Цитата:

Сообщение от рони
Dilettante_Pro,
зачем масло масляным делать?

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

рони 12.04.2016 14:10

Dilettante_Pro,
это оказывается я замаслил, а ты подхватил :) строки 9 и 10, ready в ready, одна лишняя... а во своём не видим и бревна :lol:

Dilettante_Pro 12.04.2016 14:22

рони,
Это не замаслил, а глаз замылился - на своем коде так часто бывает:write:

Sylar V 12.04.2016 18:12

Dilettante_Pro, так, и как в итоге написать правильно?)

Dilettante_Pro 12.04.2016 18:41

Цитата:

Сообщение от Sylar V (Сообщение 413915)
Dilettante_Pro, так, и как в итоге написать правильно?)

А вы не догадались? рони в своем примере уже убрал лишнее, я тоже

Dilettante_Pro 13.04.2016 15:49

Еще вариант
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

   <script>
       $(function () {
           var a = {};
           $("form").serializeArray().map(function (x) { a[x.name] = x.value; }); 
           alert(JSON.stringify(a))
       });
  </script>
</head>

<body>
<form>
   <input type="text" class="function1" name="Диаметр" value="1"> 
   <input type="text" class="function2" name="Масса" value="2">
   <input type="text" class="function3" name="Размер" value="3">
   <input type="text" class="function4" name="Материал" value="4">
   <input type="text" class="function5" name="Цвет" value="5">
</form>
</body>
</html>

Sylar V 14.04.2016 09:34

Dilettante_Pro,
Понимаете, решения отличные. Но классы у меня называются .diametr .massa .ramer. Как написать код в этом случае?

Dilettante_Pro 14.04.2016 11:15

Sylar V,
Последний вариант - пост №28 - работает без использования классов в инпутах. Только инпуты должны быть включены в форму.

Sylar V 14.04.2016 13:28

Dilettante_Pro,
У меня в верстке:
<form>
    <div>
        <div>
            <input type="text" class="function1" name="Диаметр" value="1">
            <input type="text" class="function2" name="Масса" value="2">
            <input type="text" class="function3" name="Размер" value="3">
            <input type="text" class="function4" name="Материал" value="4">
            <input type="text" class="function5" name="Цвет" value="5">
        </div>
    </div>
</form>

В итоге приходит только первый инпут без name. Форму в форме делать нельзя, сверстать иначе тоже. :(

Dilettante_Pro 14.04.2016 13:45

Sylar V,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

   <script>
       $(function () {
           var a = {};
           $("form").serializeArray().map(function (x) { a[x.name] = x.value; }); 
           alert(JSON.stringify(a))
       });
  </script>
</head>

<body>
<form>
    <div>
        <div>
            <input type="text" class="function1" name="Диаметр" value="1">
            <input type="text" class="function2" name="Масса" value="2">
            <input type="text" class="function3" name="Размер" value="3">
            <input type="text" class="function4" name="Материал" value="4">
            <input type="text" class="function5" name="Цвет" value="5">
        </div>
    </div>
</form>
</body>
</html>

Sylar V 14.04.2016 14:01

<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
 
   <script>
       $(function () {
           var a = {};
           $("form").serializeArray().map(function (x) { a[x.name] = x.value; });
           alert(JSON.stringify(a))
       });
  </script>
</head>
 
<body>
<form>
    <div>
        <div>
            <input type="text" class="diametr" name="Диаметр" value="123">
            <input type="text" class="massa" name="Масса" value="123">
            <input type="text" class="razmer" name="Размер" value="123">
            <input type="text" class="material" name="Материал" value="123">
            <input type="text" class="cvet" name="Цвет" value="123">
        </div>
    </div>
</form>
</body>
</html>


Вставил в JS:
var a = {};
	$("form").serializeArray().map(function (x) { a[x.name] = x.value;
});

$.ajax({
	type: 'POST',
	url: '/order.php?t=' + new Date().getTime(),
	dataType: 'json',
	data: {
		TOVAR: a
});


В CRM приходит только диаметр, без name.
Понимаю, что тут работает. На почту зато приходят все данные, тоже без name.
Уже не знаю, что делать.

Sylar V 15.04.2016 04:49

Dilettante_Pro,
Код работает. Данные теряются у меня. Нельзя ли сделать form индивидуальной? А то у меня в коде таких конструкций много. Странно то, что вот этот код работает без проблем:

<!DOCTYPE html>
 
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
 
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
 
  <script>
 
    $(function() {
        var a = ["Диаметр","Масса","Размер"].reduce(function(b, a, c) {
            b[a] = document.querySelector([".diametr",".massa",".razmer"][c]).value;
            return b
        }, {});
        alert(JSON.stringify(a))
    })
 
  </script>
</head>
 
<body>
<input type="text" class="diametr"  value="1">
<input type="text" class="massa"  value="2">
<input type="text" class="razmer"  value="3">
</body>
</html>

Может как-то можно его увеличить еще на два значения?


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