Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как умножить число с ячейки на заданное число и вывести результат в соседней ячейке
 
 автор: lexa8652   (02.06.2017 в 13:51)   письмо автору
 
 

Подскажите какой нужен код чтобы
Умножить число с ячейки таблицы на заданное число (которое в одной ячейке на всю таблицу т.е. для всех строк будет одинаковым но вводится только в первой строке таблицы) и вывести результат в соседней ячейке, такую операцию нужно выполнить для каждой строки таблицы.
Подскажите пожалуйста рабочий код.

  Ответить  
 
 автор: confirm   (03.06.2017 в 18:02)   письмо автору
 
   для: lexa8652   (02.06.2017 в 13:51)
 

Таблицу свою показывать надо, а не заставлять догадываться в какой ячейке число общее для всех и прочее.

  Ответить  
 
 автор: lexa8652   (04.06.2017 в 22:13)   письмо автору
 
   для: confirm   (03.06.2017 в 18:02)
 

<table style="width: 235px;">
<tbody>
<tr>
<td style="width: 186px;">наименование</td>
<td style="width: 29px;">цена</td>
<td style="width: 10px;">
<p>произведение</p>
<p>цены на число</p>
</td>
</tr>
<tr>
<td style="width: 186px;" colspan="3">
<p>Ячейка с число которое нужно умножить</p>
<p>на ячейки цены</p>
4</td>
</tr>
<tr>
<td style="width: 186px;">название 1</td>
<td style="width: 29px;">10</td>
<td style="width: 10px;"> </td>
</tr>
<tr>
<td style="width: 186px;">название 2</td>
<td style="width: 29px;">20</td>
<td style="width: 10px;"> </td>
</tr>
<tr>
<td style="width: 186px;">название 3</td>
<td style="width: 29px;">30</td>
<td style="width: 10px;"> </td>
</tr>
</tbody>
</table>

  Ответить  
 
 автор: confirm   (05.06.2017 в 02:40)   письмо автору
 
   для: lexa8652   (04.06.2017 в 22:13)
 

И чем является эта таблица? И когда делать этот расчет, при загрузке страницы? Сдается мне, что вы не то считаете.

  Ответить  
 
 автор: lexa8652   (06.06.2017 в 18:27)   письмо автору
 
   для: confirm   (05.06.2017 в 02:40)
 

Задача простая. У меня есть товар но он в долларах, а нужно вывести в рублях.
Хочу в таблицу добавить товар в долларах, а в соседней ячейке выводить посчитанную цену в рублях, а курс доллара в таблице вводить вручную
Расчет что бы считался при загрузке страницы.
Спасибо за помощь

  Ответить  
 
 автор: confirm   (06.06.2017 в 18:36)   письмо автору
 
   для: lexa8652   (06.06.2017 в 18:27)
 

Обычно это делается так (если без перезагрузки страницы):

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

У вас же слишком все запутано получается.

  Ответить  
 
 автор: lexa8652   (06.06.2017 в 23:24)   письмо автору
 
   для: confirm   (06.06.2017 в 18:36)
 

У меня нет возможности сделать так как у вас описано (такое у меня реализовано в карточке товара но в прайсе нет такой возможности). У меня это прайс товара и он создан просто в табличной форме. Есть возможность реализовать таблицу как я выше описывал?

  Ответить  
 
 автор: confirm   (07.06.2017 в 08:52)   письмо автору
 
   для: lexa8652   (06.06.2017 в 23:24)
 

Можно


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head>
<body>
<table style="width: 235px;">
<tbody>
<tr>
<td style="width: 186px;">наименование</td>
<td style="width: 29px;">цена, $</td>
<td style="width: 10px;">цена, руб.</td>
</tr>
<tr>
<td style="width: 186px;" colspan="3" id="usd"> 
56.5131393 
</td>
</tr>
<tr>
<td style="width: 186px;">название 1</td>
<td style="width: 29px;">10</td>
<td style="width: 10px;"> </td>
</tr>
<tr>
<td style="width: 186px;">название 2</td>
<td style="width: 29px;">20</td>
<td style="width: 10px;"> </td>
</tr>
<tr>
<td style="width: 186px;">название 3</td>
<td style="width: 29px;">30</td>
<td style="width: 10px;"> </td>
</tr>
</tbody>
</table>
<script>
var usd = parseFloat(document.querySelector('#usd').innerHTML);
[].slice.call(document.querySelector('table').rows, 2).forEach(function(tr) {
    tr.cells[2].innerHTML = Math.round(tr.cells[1].innerHTML * usd); //или с десятичными значениями до двух (tr.cells[1].innerHTML * usd).toFixed(2);
})
</script>
</body>
</html>

  Ответить  
 
 автор: lexa8652   (07.06.2017 в 13:58)   письмо автору
 
   для: confirm   (07.06.2017 в 08:52)
 

Спасибо!!! Все работает супер

  Ответить  
 
 автор: lexa8652   (07.06.2017 в 21:56)   письмо автору
 
   для: confirm   (07.06.2017 в 08:52)
 

Подскажите пожалуйста, что нужно изменить в скрипте чтобы добавить пару колонок с лева от колонки цены в $

  Ответить  
 
 автор: confirm   (08.06.2017 в 11:42)   письмо автору
 
   для: lexa8652   (07.06.2017 в 21:56)
 

Что значит добавить? У вас это некая автономная html страница, если судить по описанию, в которую вы вручную добавляете курс валют. Кстати, выгоднее его помещать не в ячейку таблицу, удалив ее вообще, а непосредственно в js-код:

var usd = parseFloat(document.querySelector('#usd').innerHTML);

var usd = 56.5131393; //здесь указываем текущий курс валюты


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

А после модификации нужно будет подправить код. В цикле код получает из коллекции ячеек текущей строки таблицы конкретные ячейки по их индексу. Индекс ячеек начинается с 0. То есть

tr.cells[2].innerHTML = Math.round(tr.cells[1].innerHTML * usd);

означает

значение ячейки 3 (индекс 2) = значению ячейки 2 (индекс 1) умноженному на курс валюты.

  Ответить  
 
 автор: lexa8652   (08.06.2017 в 23:23)   письмо автору
 
   для: confirm   (08.06.2017 в 11:42)
 

Спасибо за детально развернутый ответ

  Ответить  
 
 автор: confirm   (09.06.2017 в 01:30)   письмо автору
 
   для: lexa8652   (08.06.2017 в 23:23)
 

Если наряду с добавлением ячеек удалите и строку таблицы с курсом валюты, определяя ее непосредственно в скрипте, то нужно еще сделать небольшую правку. Циклом осуществляется проход не по всем строкам таблицы (коллекция rows), а начиная с третьей (они также имеют индексы начиная с 0), так как первая, это заголовок, а вторая с курсом валюты. Для этого из всей коллекции строк берется срез, начиная с третьей. Если удалить строку с курсом валют, то нужно брать срез начиная со второй. Для этого нужно изменить только индекс с 2 на 1 в этой строке кода:

[].slice.call(document.querySelector('table').rows, 1).forEach(function(tr) {

  Ответить  
 
 автор: lexa8652   (13.06.2017 в 17:21)   письмо автору
 
   для: confirm   (09.06.2017 в 01:30)
 

Подскажите, а можно вместо ручного ввода курса валюты сделать автоматический, что бы он подгружался (изменялся) автоматически?

  Ответить  
 
 автор: confirm   (13.06.2017 в 18:39)   письмо автору
 
   для: lexa8652   (13.06.2017 в 17:21)
 

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

Если же исполнять не из под веб страницы, то можно запросить текущий курс и с ЦБ РФ. В среде Windows можно запустить эту страницу как приложение. Для этого достаточно добавить в нее соответствующие теги и сменить расширение на .hta. В таком режиме все ограничения снимаются и можно будет подключать и выполнять даже системные библиотеки. Поэтому без проблем или посредством Ajax, или просто используя IFRAME можно будет получить текущий курс валюты с любого ресурса.

  Ответить  
 
 автор: lexa8652   (16.06.2017 в 12:41)   письмо автору
 
   для: confirm   (13.06.2017 в 18:39)
 

Все это сложно для моего понимания. Наверно придется оставить ручной ввод курса валют.

  Ответить  
 
 автор: confirm   (16.06.2017 в 14:54)   письмо автору
 
   для: lexa8652   (16.06.2017 в 12:41)
 

Запрашиваемый сервер должен давать разрешение заголовком Access-Control-Allow-Origin, в противном случае из под веб страницы браузер заблокирует доступ к нему. Данный запрашиваемый ресурс разрешает, поэтому с него асинхронным запросом получается курс валюты, раз в сутки.

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
table {
    border-collapse: separate;
    font: 13px Arial;
}

th, td {
    padding: 4px 8px;
    border: 1px solid #bbb;
}

th {
    background: #ccc;
}

em {
    font-weight: normal;
    font-size: 12px;
}
</style>
</head>
<body>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head>
<body>
<table>
    <tr>
        <th>Наименование</th>
        <th>Цена, <em>$</em></th>
        <th>Цена, <em>руб.</em></th>
    </tr>
    <tr>
        <td>название 1</td>
        <td>10</td>
        <td></td>
    </tr>
    <tr>
        <td>название 2</td>
        <td>20</td>
        <td></td>
    </tr>
    <tr>
        <td>название 3</td>
        <td>30</td>
        <td></td>
    </tr>
</table>

<script>
var mem = localStorage, //хранилище
    now = new Date().toISOString().substr(0, 10);

if(mem.curdate==undefined) { //курс по умолчанию
    mem.curdate = '2017-06-10';
    mem.current = 56.5131
}

if(mem.curdate != now) { //если в хранилище курс не текущей даты, то запрашиваем курс
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'https://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.xchange+where+pair+=+%22USDRUB%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys');
    xhr.onload = function() {
        if (xhr.status == 200) {
            try { //сохраняем курс
                now = JSON.parse(xhr.responseText).query;
                mem.curdate = now.created.substr(0, 10);
                mem.current = now.results.rate.Rate
            } catch (e) {}
        }
        convert()
    }
    xhr.send()
} else convert();

function convert() {
    [].slice.call(document.querySelector('table').rows, 1).forEach(function(tr) {
        tr.cells[2].innerHTML = Math.round(tr.cells[1].innerHTML * mem.current);
    })
}
</script>
</body>
</html>
</body>
</html>

  Ответить  
 
 автор: lexa8652   (04.06.2017 в 22:18)   письмо автору
704.6 Кб
 
   для: confirm   (03.06.2017 в 18:02)
 

Вот фото как выглядит таблица

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования