Javascript.RU

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

Нужна помощь с калькулятором
Ребята. С JS только-только первые шаги. В основном стараюсь разобраться во всем сам. Но иногда нужно направить на путь истинный. Есть проблема с калькулятором по атрибутам товара на jquery. Я сделал подмену значения для цены товара если выбран такой-то атрибут.
Н появилась проблемма. Если атрибутов много (они перечисляются на странице) то нужно вместо цены поставить сумму цен атрибутов.
Вот код со скриптом:
Код:
<?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&amp;product_id='.$product_id.'&amp;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 
} ?>
Как мне править скрипт чтобы выполнить данную операцию суммирования цен аттрибутов?

Тут результат
http://splitstore.ru/index.php?page=...hk=1&Itemid=65
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2011, 11:32
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Оформляйте понятнее. А то мозг сломать можно.

<?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&amp;product_id='.$product_id.'&amp;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 скрипт впридачу.
Кстатии ссылка пример не работает.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 20.09.2011 в 11:44.
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2011, 11:53
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

особо вникать нестал, думаю как то так.

function getSumOptions(){
   var sum=0;//локальная переменная недоступная за пределами функции
   $(".inputboxattrib").find("option").each(function(){
       //parseFloat должно вернуть число с точкой. если в value число, иначе nan, и весь расчёт на смарку ))
       sum += parseFloat(this.val()); 
   });
   alert (sum);
};
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 20.09.2011 в 12:01.
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2012, 16:30
Новичок на форуме
Отправить личное сообщение для Snek17 Посмотреть профиль Найти все сообщения от Snek17
 
Регистрация: 02.11.2012
Сообщений: 2

Добрый день. Та же ситуация, куда вставлять функцию помогите пожалуйста!

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&amp;product_id='.$product_id.'&amp;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 
} ?>
Ответить с цитированием
  #5 (permalink)  
Старый 03.11.2012, 17:48
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

А при каком условии должно ?
быть может так ?
$(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 ();
});
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 03.11.2012 в 17:59.
Ответить с цитированием
  #6 (permalink)  
Старый 03.11.2012, 19:41
Новичок на форуме
Отправить личное сообщение для Snek17 Посмотреть профиль Найти все сообщения от Snek17
 
Регистрация: 02.11.2012
Сообщений: 2

Походу не правильно впихнул:
<?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

Как видите есть несколько селектов с ценами, вот их и нужно подсчитать, помогите пожалуйста с решением задачи.
Ответить с цитированием
  #7 (permalink)  
Старый 06.11.2012, 09:01
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

$(".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>');
});

})
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 06.11.2012 в 09:18.
Ответить с цитированием
  #8 (permalink)  
Старый 14.12.2012, 19:57
Новичок на форуме
Отправить личное сообщение для irbis_teh Посмотреть профиль Найти все сообщения от irbis_teh
 
Регистрация: 14.12.2012
Сообщений: 7

Нужна помощь в определении ошибки скрипта. сам только новичек в 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
*/

На сайте тоже не работает. Что тут не так?
Ответить с цитированием
  #9 (permalink)  
Старый 14.12.2012, 20:22
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
сам только новичек в JS и на форуме тоже, поэтому своего поста создать немогу
Вы феноменально скромный человек

приведите пример кода вместе с формой.
затем выделите код и нажмите на кнопку вставить код html.
тоесть начнём с полного описания задачи и правильного её оформления.

ещё интересно какие данные попадают в eval.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.12.2012 в 20:26.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь в JavaScript михаил Общие вопросы Javascript 26 30.10.2013 12:07
нужна помощь тех кто разбирается. igoryk jQuery 2 20.10.2010 19:42
Нужна помощь, если можно Fox-WNT Общие вопросы Javascript 3 27.07.2010 11:38
нужна помощь Sergiy Серверные языки и технологии 2 31.03.2010 20:16
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17