Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с Javascript кодом (https://javascript.ru/forum/misc/70749-pomogite-s-javascript-kodom.html)

Александр83 18.10.2017 12:00

рони,laimas, подскажите пожалуйста?

Nexus 18.10.2017 12:18

Цитата:

Сообщение от Александр83
если как есть то всё отображается так 100200300, мне соответственно необходимо все сложить = и получить общую сумму.

var summ_comp = +head_itog + engine_itog;

Цитата:

Сообщение от Александр83
также интересен вопрос сброса кеша при каждой подгрузки данного JS?

Добавляй в конец пути подключаемого файла знак вопроса и рандомную строку.
Т.е. так:
file_url+'?'+Math.random();

Dilettante_Pro 18.10.2017 12:25

Александр83,
Цитата:

Сообщение от Александр83
акже к примеру переменные с атрибутов равны (head_itog = 100, table_itog = 200, engine_itog = 300)
значения здесь могут быть разные - это пример!

если как есть то всё отображается так 100200300, мне соответственно необходимо все сложить = и получить общую сумму.

Как говорится, почувствуйте разницу:
<input type='text' price-head = '100' price-table='200' price-engine='300'>
<div id = 'result1'></div>
<div id = 'result2'></div>
<script>
        elem = document.querySelector('input');
        var head_itog = elem.getAttribute('price-head');
        var table_itog = elem.getAttribute('price-table');
        var engine_itog = elem.getAttribute('price-engine');
        result1.innerText = head_itog + table_itog + engine_itog;
        result2.innerText = Number(head_itog) + Number(table_itog) + +Number(engine_itog);
</script>

А вообще, вам нужно книжки почитать, чтобы задавать более осмысленные и корректные вопросы

Александр83 18.10.2017 12:28

Nexus,
не работает, можно на примере?
$.ajax({
                type: "POST",
                url: "/ajax.handler.php+'?'+Math.random();",
                data: $("#form_engine").serialize(),
                success: function(html) {
                        $("#result").empty();
                        $("#result").append(html);
                }
        });

Nexus 18.10.2017 12:35

Александр83, рука-лицо.
$.ajax({
                type: "POST",
                url: "/ajax.handler.php?"+Math.random(),
                data: $("#form_engine").serialize(),
                success: function(html) {
                        $("#result").empty();
                        $("#result").append(html);
                }
        });

Nexus 18.10.2017 12:38

Dilettante_Pro, зачем в строке 10 "+" перед последним "Number"?

Александр83 18.10.2017 13:03

Dilettante_Pro,
Dilettante_Pro,
за вот эту строку спасибо,
Number(head_itog) + Number(table_itog) + +Number(engine_itog);

остальное не нужно!

Александр83 18.10.2017 13:05

Nexus,
оскорбления оставьте для себя, а если я что-то не понимаю, так поэтому и обращаюсь сюда!

Dilettante_Pro 18.10.2017 13:13

Nexus,
Цитата:

Сообщение от Nexus
Dilettante_Pro, зачем в строке 10 "+" перед последним "Number"?

Сначала написал в короткой нотации, потом, чтобы было понятнее, заменил (но, как оказалось, не все) на Number:write:

Dilettante_Pro 18.10.2017 13:16

Александр83,
Цитата:

Сообщение от Александр83
остальное не нужно!

Естественно. Все остальное просто для наглядности

Александр83 18.10.2017 17:42

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Название документа</title>
</head>
<body>
 
  <div class="test">
    <p class="test1">Абзац1.</p>
    <p class="test2">Абзац2.</p>
 </div>

  <button onclick="foo()">Выделить цветом абзац</button>
</body>
</html>


function foo() {
      var matches = document.querySelector(".test1");
      matches.style.backgroundColor = "yellow";
    }
  </script>

Dilettante_Pro,
Подскажите еще такой момент,
var matches = document.querySelector(".test1 .text2"); в этой строке необходимо взять класс с двух абзацев, по умолчанию берет только первый, как сделать так чтоб захватывал оба, объединенный div с классом test исключается, так как взамен абзацев буду использовать select....

Nexus 18.10.2017 17:46

function foo(){
	document.querySelectorAll('.test1,.test2').forEach(function(item){
		item.style.backgroundColor='yellow';
	});
}

Александр83 18.10.2017 18:26

Nexus,
спасибо за предыдущий ответ, подскажите на примере вот этого?
<select class="proso1" width="100%" id="proso_engine" name="enginephp">
<option value="0" title="" price-engine="0">по умолчанию</option> 
<option value="100" value-url="ссылка" title="" price-engine="100" product="engine №1">engine №1&nbsp;-&nbsp;100&nbsp;руб.</option> 
<option value="200" value-url="ссылка" title="" price-engine="200" product="engine №2">engine №2&nbsp;-&nbsp;200&nbsp;руб.</option>
</select>



<select class="proso1" width="100%" id="proso_table" name="tablephp"> 
<option value="0" title="" price-table="0">по умолчанию</option>  
<option value="10" value-url="ссылка" title="" price-table="10">table №1&nbsp;-&nbsp;10&nbsp;руб.</option> 
<option value="20" value-url="ссылка" title="" price-table="20">table №2&nbsp;-&nbsp;20&nbsp;руб.</option>
</select>

<div class="form_itog_01" id="result_02"></div>


document.querySelector('.proso1, .proso1').onchange = function() {
        var head_itog = '1000';
        var table_itog = this.options[this.selectedIndex].getAttribute('price-table');
        var engine_itog = this.options[this.selectedIndex].getAttribute('price-engine');
        result_02.innerText = Number(head_itog) + Number(engine_itog) + Number(table_itog); 
};

Александр83 18.10.2017 18:30

а извините сам вопрос то в том, чтоб сложить все выбранные суммы?

Dilettante_Pro 18.10.2017 19:12

Александр83,
Перечень ошибок:
1. document.querySelector выбирает один первый попавшийся элемент.
2. '.proso1, .proso1' - зачем 2 раза один и тот же класс? Не поможет. См. ошибку 1 и пост 52 от Nexus.
3. this в обработчике - это конкретный элемент, на котором произошло событие.
var table_itog = this.options[this.selectedIndex].getAttribute('price-table');
        var engine_itog = this.options[this.selectedIndex].getAttribute('price-engine');
- неправильно, т.к эти атрибуты в опциях в разных элементах.
Почитайте уже книжки наконец!

Александр83 19.10.2017 05:18

Dilettante_Pro,
Может быть все же на примере покажите?, а книжки я непременно почитаю :)

Александр83 19.10.2017 06:06

Nexus,
Dilettante_Pro,
laimas,
рони,
Omnia, помогите с данным решением?.

Nexus 19.10.2017 09:38

https://jsfiddle.net/ayufwL17/
var engine=document.getElementById('proso_engine'),
	table=document.getElementById('proso_table');
	
[engine,table].forEach(function(item){
	item.addEventListener('change',function(){
		var total=1000;
		
		total+=+table.options[table.selectedIndex].getAttribute('price-table');
		total+=+engine.options[engine.selectedIndex].getAttribute('price-engine');
		
		document.getElementById('result_02').innerHTML=total;
	},false);
});

Dilettante_Pro 19.10.2017 10:35

Nexus,
Вариант попроще - без танцев с бубном вокруг option
<select class="proso1" width="100%" id="proso_engine" name="enginephp">
<option value="0" title="" price-engine="0" selected>по умолчанию</option> 
<option value="100" value-url="ссылка" title="" price-engine="100" product="engine №1">engine №1&nbsp;-&nbsp;100&nbsp;руб.</option> 
<option value="200" value-url="ссылка" title="" price-engine="200" product="engine №2">engine №2&nbsp;-&nbsp;200&nbsp;руб.</option>
</select>
<select class="proso1" width="100%" id="proso_table" name="tablephp"> 
<option value="0" title="" price-table="0" selected>по умолчанию</option>  
<option value="10" value-url="ссылка" title="" price-table="10">table №1&nbsp;-&nbsp;10&nbsp;руб.</option> 
<option value="20" value-url="ссылка" title="" price-table="20">table №2&nbsp;-&nbsp;20&nbsp;руб.</option>
</select>
<div class="form_itog_01" id="result_02"></div>
<script>
var engine=document.getElementById('proso_engine'),
	table=document.getElementById('proso_table');
	
[engine,table].forEach(function(item){
	item.addEventListener('change',function(){
		var total=1000;
		
		total+=+table.value;
		total+=+engine.value;
		
		document.getElementById('result_02').innerHTML=total;
	},false);
});
</script>

Nexus 19.10.2017 10:43

Dilettante_Pro, код вопрошающего работал, я заюзал его.
В вашей реализации от переменной total можно вовсе отказаться.

Dilettante_Pro 19.10.2017 10:52

Nexus,
Можно, конечно - но я не хотел сильно менять код, а просто показал вопрошающему нормальное использование селекта

Александр83 19.10.2017 18:30

Nexus,Dilettante_Pro, спасибо за ответ!, еще один момент данный скрипт работает и тут и на https://jsfiddle.net/, на сайте у меня не работает, где то какая то несовместимость (платформа битрикс), предыдущие все работали...

Александр83 20.10.2017 06:54

Не ужели не знает ни кто в чем может быть причина?, есть вероятность что select тянет стили шаблона, но точно не знаю может это способствовать препятствием для JS выше изложенного...

Nexus 20.10.2017 08:29

Александр83, смотри консоль браузера.

Александр83 20.10.2017 11:05

Nexus,
консоль кроме этого не выдает ничего,
[Violation] Forced reflow while executing JavaScript took 40ms

Александр83 20.10.2017 11:07

ну и когда, клацаю по select..... выдает все тоже только в разных ms

Nexus 20.10.2017 11:16

Александр83, если нет ошибок, значит либо скрипт работает исправно, либо он вообще не выполняется.
В коде отсутствуют какие-либо проверки на наличие элементов, поэтому их (элементов) отсутствие на странице непременно приведен к ошибке.

Александр83 20.10.2017 11:40

Nexus,
скорее всего JS не срабатывает, буду искать причину...спасибо за ответ!

Александр83 21.10.2017 12:16

Nexus,
$.ajax({
                type: "POST",
                url: "/ajax.handler.php?"+Math.random(),
                data: $("#form_engine").serialize(),
                success: function(html) {
                        $("#result").empty();
                        $("#result").append(html);
                        var engine = data;
                }
        });

подскажите как ответ с сервера записать в переменную engine, а не выводить ответ в id=result ?

Nexus 21.10.2017 14:03

Александр83, вы похоже вообще не понимаете что делаете.
Может быть имеет смысл выделить денежные средства на реализацию ваших задумок и доверить дело профессионалам, а не самолично пытаться собрать чудовище по советам с форума, которое после легче будет пристрелить, чем заставить двигаться?

Если не понимаете, что делает тот или иной код, то попытайтесь, как минимум, загуглить что делают ближайшие функции.

Цитата:

Сообщение от Александр83
подскажите как ответ с сервера записать в переменную engine, а не выводить ответ в id=result ?

Строка 8:
var engine = html;

Александр83 21.10.2017 15:56

Nexus,
у вас прям какая то фобия меня обвинять)), скажите в таком случаи для чего существуют форумы?, так поговрить о том о сем?), я думаю что они и существуют для какой либо помощи чайникам вроде меня, если я не знаю JS, так поэтому и задаю вопросы!!!, а то что я делаю..я прекрасно понимаю...не стоит обвинять людей которых вы не знаете...


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