Нужна помощь с калькулятором
Ребята. С 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, время: 00:32. |