Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.01.2014, 22:36
Интересующийся
Отправить личное сообщение для nohc Посмотреть профиль Найти все сообщения от nohc
 
Регистрация: 02.09.2009
Сообщений: 11

Простой калькулятор - как сделать выборку?
Здравствуйте!

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

JS:
function calc() {
          var v = $('#wrap56 .spinner input').val();
          var pv = $('#wrap56 #pv56').val();
          $('#day-price56').html(pv);
          $('#price56').html(parseInt(pv*v));
}    
var spinner = $('.spinner').tb3spinner({'value':12,min:12,max:60, attrs:{'name':'days56'},changed:function(){calc()} });


HTML:
<div id="wrap56">
     <input name="pv" id="pv56" type="hidden" value="100" />
     <div class="spinner>
             <input type="text" name="days56" value="12">
     </div>
     <div id="price56">1200</div> рублей
     <div id="day-price56">100</div> руб. в сутки          
</div>


Так все работает.

Но что делать, если вывожу на странице неизвестное количество wrap[id], pv[id], day-price[id], price[id] - (wrap55,wrap56,wrap57, ...)?

Пытался что-то сделать через div[id^=wrap] и this - ничего не получается.

Помогите пожалуйста - как правильно сделать выборку?
Заранее огромное спасибо!

Используется tb3spinner.js, но думаю, разницы нет.
Ответить с цитированием
  #2 (permalink)  
Старый 27.01.2014, 23:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от nohc
Используется tb3spinner.js, но думаю, разницы нет.
скажи где tb3spinner.js зимует?
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2014, 23:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

nohc,
function calc() {
          var parent = $(this).parents('[id^=wrap]')
          var v = +this.value;
          var pv = +$('[id^=pv]',parent).val();
          $('[id^=day]',parent).html(pv);
          $('[id^=price]',parent).html(pv*v);
}

может у вас неполучалось из-за опечатки в 3 строке?
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2014, 23:11
Интересующийся
Отправить личное сообщение для nohc Посмотреть профиль Найти все сообщения от nohc
 
Регистрация: 02.09.2009
Сообщений: 11

https://bitbucket.org/kolerii/jquery.tb3spinner.js/

Он только для превращения инпута в спиннер используется
Ответить с цитированием
  #5 (permalink)  
Старый 27.01.2014, 23:18
Интересующийся
Отправить личное сообщение для nohc Посмотреть профиль Найти все сообщения от nohc
 
Регистрация: 02.09.2009
Сообщений: 11

Сообщение от рони Посмотреть сообщение
nohc,
function calc() {
          var parent = $(this).parents('[id^=wrap]')
          var v = +this.value;
          var pv = +$('[id^=pv]',parent).val();
          $('[id^=day]',parent).html(pv);
          $('[id^=price]',parent).html(pv*v);
}

может у вас неполучалось из-за опечатки в 3 строке?
Да, наверное tb3spinner.js влияет.

Так тоже не получается - пропадает инпут (он динамически создается tb3spinner'ом)
Ответить с цитированием
  #6 (permalink)  
Старый 27.01.2014, 23:26
Интересующийся
Отправить личное сообщение для nohc Посмотреть профиль Найти все сообщения от nohc
 
Регистрация: 02.09.2009
Сообщений: 11

Делаю вот так:
function calc() {
          var parent = $(this).parents('div[id^=wrap]');
          var v = +this.value;
          //var pv = +$('[id^=pv'],parent).val();
          //$('[id^=day]',parent).html(pv);
          //$('[id^=price]',parent).html(pv*v);
          alert(v);
}


Выскакивает сообщение: NaN
Ответить с цитированием
  #7 (permalink)  
Старый 27.01.2014, 23:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

nohc,
видеть надо работу вашего плагина а не гадать
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2014, 00:53
Интересующийся
Отправить личное сообщение для nohc Посмотреть профиль Найти все сообщения от nohc
 
Регистрация: 02.09.2009
Сообщений: 11

Сейчас по быстрому залил на хостинг, можно посмотреть здесь:
http://zen-book.ru/
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2014, 01:04
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Полнейший пипец. Искать через три-девять земель два инпута чтобы перемножить их валуи.

Сообщение от nohc
Но что делать, если вывожу на странице неизвестное количество wrap[id], pv[id], day-price[id], price[id] - (wrap55,wrap56,wrap57, ...)?
Внутри контейнера не должно быть id. Шаблон контейнера идентифицирует элементы сам собой. Это лишает вас свободы пихать туда произвольное дерево произвольного числа элементов, что благо, поскольку для нормальных деревьев и CSS когда-то был разработан.

Другими словами скрипт знает что первый чайлд <div id="wrap56"> это "в день", а второй чайлд это "в час" или как там у вас, не важно.

Это если вы найдете все <div id="wrapХХХХХХХ">. А если не найдете то и не надо. Потому что по имени, которое может быть одинаковым для 100500 инпутов, вы найдете все 100500, каждый из которых найдет свою пару среди 100500 тех инпутов, с валуями которых ему хочется умножиться.

В процессе повешания функции calc() на инпуты профтыкаете счетчик как index во все найденные по имени элементы множимого. И тогда любой множимый найдет множителя:

var my_pair = document.getElementsByName('known_name')[this.index];

Ну и самое очевидно: загрузите с сервера готовый массив этих id и не парьтесь поисками пары.
Ответить с цитированием
  #10 (permalink)  
Старый 28.01.2014, 01:13
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

На сервере одинаковые имена превратятся в "индексный" массив если там php.

Не проверял и не собираюсь, но среди мощностей jquery по идее должна быть и такая, которая умеет собирать в объекты ссылки на элементы по именам в формате name="some[97]";

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать чтобы в popup окне показывалось картинка? sarik Общие вопросы Javascript 31 15.03.2013 13:12
как сделать так чтобы в popup окне принимался css стили,? sarik Общие вопросы Javascript 2 12.03.2013 10:24
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Как сделать постоянную проверку на javascript alb Общие вопросы Javascript 18 09.01.2010 14:05