Нужна помощь с калькулятором
Ребята. С JS только-только первые шаги. В основном стараюсь разобраться во всем сам. Но иногда нужно направить на путь истинный. Есть проблема с калькулятором по атрибутам товара на jquery. Я сделал подмену значения для цены товара если выбран такой-то атрибут.
Н появилась проблемма. Если атрибутов много (они перечисляются на странице) то нужно вместо цены поставить сумму цен атрибутов. Вот код со скриптом: Код:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?> Код:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); Тут результат http://splitstore.ru/index.php?page=...hk=1&Itemid=65 |
Оформляйте понятнее. А то мозг сломать можно.
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?> <?php // User is not allowed to see a price or there is no price if( !$auth['show_prices'] || !isset($price_info["product_price_id"] )) { $link = $sess->url( $_SERVER['PHP_SELF'].'?page=shop.ask&product_id='.$product_id.'&subject='. urlencode( $VM_LANG->_('PHPSHOP_PRODUCT_CALL').": $product_name") ); echo vmCommonHTML::hyperLink( $link, $VM_LANG->_('PHPSHOP_PRODUCT_CALL') ); } ?> <?php // DISCOUNT: Show old price! if(!empty($discount_info["amount"])) { ?> <span class="product-Old-Price"> <?php echo $CURRENCY_DISPLAY->getFullValue($undiscounted_price); ?></span> <br/> <?php } ?> <?php if( !empty( $price_info["product_price_id"] )) { ?> <script type="text/javascript"> jQuery(function() { jQuery('option').click(function() { if(jQuery(this).attr("title") != '') { jQuery('span.productPrice').replaceWith('<span class="productPrice">' + jQuery(this).attr("title") + '</span>'); } else { jQuery('span.productPrice').replaceWith('<span class="productPrice"><?php echo $CURRENCY_DISPLAY->getFullValue($base_price) ?></span>'); } return false; }); }); </script> <span class="productPrice"> <?php echo $CURRENCY_DISPLAY->getFullValue($base_price) ?> <?php echo $base_price ?> <?php echo $text_including_tax ?> </span> <?php } echo $price_table; ?> <?php // DISCOUNT: Show the amount the customer saves if(!empty($discount_info["amount"])) { echo "<br />"; echo $VM_LANG->_('PHPSHOP_PRODUCT_DISCOUNT_SAVE').": "; if($discount_info["is_percent"]==1) { echo $discount_info["amount"]."%"; } else { echo $CURRENCY_DISPLAY->getFullValue($discount_info["amount"]); } } ?> <?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); foreach($attributes as $attribute) { ?> <div class="vmAttribChildDetail" style="float: left;width:30%;text-align:right;margin:3px;"> бля <label for="<?php echo $attribute['titlevar'] ?>_field"><?php echo $attribute['title'] ?></label>: </div> <div class="vmAttribChildDetail" style="float:left;width:60%;margin:3px;"> <select class="inputboxattrib" id="<?php echo $attribute['titlevar'] ?>_field" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>"> <?php echo ($options_item) ?> <?php foreach ( $attribute['options_list'] as $options_item ) : ?> <?php if( isset( $options_item['display_price']) ) : ?> <option title="<?php echo $options_item['display_price'] ?>" value="<?php echo $options_item['base_var'] ?>"><?php echo $options_item['base_value'] ?> (<?php echo $options_item['sign'].$options_item['display_price'] ?>)</option> <?php else : ?> <option value="<?php echo $options_item['base_var'] ?>"><?php echo $options_item['base_value'] ?></option> <?php endif; ?> <?php endforeach; ?> </select> </div> <br style="clear:both;" /> <?php } ?> Дала пойдут быстрее если вы результирующий фрагмент html покажете. И js скрипт впридачу. Кстатии ссылка пример не работает. |
особо вникать нестал, думаю как то так.
function getSumOptions(){ var sum=0;//локальная переменная недоступная за пределами функции $(".inputboxattrib").find("option").each(function(){ //parseFloat должно вернуть число с точкой. если в value число, иначе nan, и весь расчёт на смарку )) sum += parseFloat(this.val()); }); alert (sum); }; |
Добрый день. Та же ситуация, куда вставлять функцию помогите пожалуйста!
price.tpl.php <?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?> <?php // User is not allowed to see a price or there is no price if( !$auth['show_prices'] || ( !isset($price_info["product_price_id"] ) && ( !$parent_has_children) ) ) { $link = $sess->url( $_SERVER['PHP_SELF'].'?page=shop.ask&product_id='.$product_id.'&subject='. urlencode( $VM_LANG->_('PHPSHOP_PRODUCT_CALL').": $product_name") ); echo vmCommonHTML::hyperLink( $link, $VM_LANG->_('PHPSHOP_PRODUCT_CALL') ); } ?> <?php // DISCOUNT: Show old price! Inline style specified for PDF creation, remove it if you don't need it if(!empty($discount_info["amount"])) { ?> <span class="product-Old-Price" style="color:red;text-decoration:line-through;"> <?php echo $CURRENCY_DISPLAY->getFullValue($undiscounted_price); ?></span> <br/> <?php } ?> <?php if( !empty( $price_info["product_price_id"] )) { ?> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery(".inputboxattrib").change(function () { jQuery('span.productPrice').replaceWith('<span class="productPrice">'+jQuery(".inputboxattrib option:selected").attr("title")+'</span>'); }) }); </script> <span class="productPrice"> <?php echo $CURRENCY_DISPLAY->getFullValue($base_price) ?> <?php echo $text_including_tax ?> </span> <?php } echo $price_table; ?> <?php // DISCOUNT: Show the amount the customer saves if(!empty($discount_info["amount"])) { echo "<br />"; echo $VM_LANG->_('PHPSHOP_PRODUCT_DISCOUNT_SAVE').": "; if($discount_info["is_percent"]==1) { echo $discount_info["amount"]."%"; } else { echo $CURRENCY_DISPLAY->getFullValue($discount_info["amount"]); } } ?> addtocart_advanced_attribute.tpl.php <?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); foreach($attributes as $attribute) { ?> <div class="vmAttribChildDetail" style="float: left;text-align:right;margin:3px;"> <label for="<?php echo $attribute['titlevar'] ?>_field"><?php echo $attribute['title'] ?></label>: </div> <div class="vmAttribChildDetail" style="float:left;margin:3px;"> <select class="inputboxattrib" id="<?php echo $attribute['titlevar'] ?>_field" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>"> <?php foreach ( $attribute['options_list'] as $options_item ) : ?> <?php if( isset( $options_item['display_price']) ) : ?> <option title="<?php echo $options_item['display_price'] ?>" value="<?php echo $options_item['base_var'] ?>"><?php echo $options_item['base_value'] ?> (<?php echo $options_item['sign'].$options_item['display_price'] ?>)</option> <?php else : ?> <option value="<?php echo $options_item['base_var'] ?>"><?php echo $options_item['base_value'] ?></option> <?php endif; ?> <?php endforeach; ?> </select> </div> <br style="clear:both;" /> <?php } ?> |
А при каком условии должно ?
быть может так ? $(function(){ function getSumOptions(){ var sum=0;//локальная переменная недоступная за пределами функции $(".inputboxattrib").find("option").each(function(){ //parseFloat должно вернуть число с точкой. если в value число, иначе nan, и весь расчёт на смарку )) sum += parseFloat(this.val()); }); alert (sum); } //при изменении inputboxattrib, сработает расчёт $('.inputboxattrib').change( getSumOptions ); //строка ниже посчитает цену при открытии страницы (ЕСЛИ НЕ НАДО ТО ЗАРЕМАРИТЬ) getSumOptions (); }); |
Походу не правильно впихнул:
<?php if( !empty( $price_info["product_price_id"] )) { ?> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery(".inputboxattrib").change(function () { function getSumOptions(){ var sum=0;//локальная переменная недоступная за пределами функции $(".inputboxattrib").find("option").each(function(){ //parseFloat должно вернуть число с точкой. если в value число, иначе nan, и весь расчёт на смарку )) sum += parseFloat(this.val()); }); alert (sum); } //при изменении inputboxattrib, сработает расчёт $('.inputboxattrib').change( getSumOptions ); jQuery('span.productPrice').replaceWith('<span class="productPrice">' + getSumOptions () + '</span>'); }) }); </script> <span class="productPrice"> <?php echo $CURRENCY_DISPLAY->getFullValue($base_price) ?> <?php echo $text_including_tax ?> </span> <?php } echo $price_table; ?> Вот тут ведется война: http://mobilario.cleverhosting.org/i...emart&Itemid=1 Как видите есть несколько селектов с ценами, вот их и нужно подсчитать, помогите пожалуйста с решением задачи. |
$(".inputboxattrib") - ненаходит элементы
jQuery (".inputboxattrib") - находит значит конфликт так как у тебя джумла то конфликт происходит с mootools, mootools просто затирает $ с jQuery 1) сразу после загрузки jquery пропиши команду noConflict() 2) используй конструкцию jQuery(function($){ внутри $- доступен несмотря на моотоолс }) //возможно что то подобное тебе надо jQuery(function($){ function getSumOptions(){ var sum=0;//локальная переменная недоступная за пределами функцииТ $(".inputboxattrib").find("option").each(function(){ //parseFloat должно вернуть число с точкой. если в value число, иначе nan, и весь расчёт на смарку )) sum += parseFloat(this.val()); }); //alert (sum); return sum; } //при изменении inputboxattrib, сработает расчёт jQuery(".inputboxattrib").change(function(){ jQuery('span.productPrice').replaceWith('<span class="productPrice">' + getSumOptions () + '</span>'); }); }) |
Нужна помощь в определении ошибки скрипта. сам только новичек в JS и на форуме тоже, поэтому своего поста создать немогу, а проблему решить надо. прошу прощения если что не так.
Вот мой скрипт: <script type="text/javascript"> function calc(form) { var K = eval(form.K.value); var Rz = eval(form.Rz.value); var Rx = eval(form.Rx.value); var Ry = eval(form.Ry.value); var D = eval(form.D.value); var Ldet = eval(form.Ldet.value); var phi1 = eval(form.phi1.value); var phi2 = eval(form.phi2.value); var l = eval(form.l.value); var ap = eval(form.ap.value); var gama = eval(form.gama.value); form.Q.value = K*Math.sqrt(math.pow(Rz,2)+Math.pow(Ry-(Rx*D)/(2*Ldet),2))*Math.abs(1-Math.tan((90-gama/2)+phi1)*Math.tan((phi2)*3*l/ap)/Math.abs(Math.tan((90-gama/2)+Phi1))); } </script> Внем при запуске редактора JS выводит ошибку. /* Exception: syntax error @Scratchpad:10 */ На сайте тоже не работает. Что тут не так? |
Цитата:
приведите пример кода вместе с формой. затем выделите код и нажмите на кнопку вставить код html. тоесть начнём с полного описания задачи и правильного её оформления. ещё интересно какие данные попадают в eval. |
Часовой пояс GMT +3, время: 20:38. |