Jquery взема цена от диапазон и искам да го направя статичен

правя тази функция:

function price(val){
var test = $('span.hikashop_product_price_full:visible').text();
var test2 = test.split('%');
var test3 = test2[1].split(' ');
var test4 = test3[0].replace(',','.');
var eyy = parseFloat(test4) *val/100 + parseFloat(test4);
eyy = eyy.toFixed(2)
var ett = test.replace(test3[0]+' '+test3[1],'<span class=\"hikashop_product_price hikashop_product_price_0 hikashop_product_price_with_discount\">'+eyy+' '+test3[1]+'</span>');
$('span.hikashop_product_price_full:visible').html(ett);

}

вземам стойност от динамичен <span> таг (да кажем, че е динамичен, защото се променя в зависимост от друго поле). имам поле

<select id="custome_vara" name="data[item][custome_vara]" size="1" onchange="price(this.value);">
<option value="" id="custome_vara_" selected="selected">alb</option>
<option value="20" id="custome_vara_20">stejar auriu</option>
<option value="30" id="custome_vara_30">moreiche</option>
</select>

и се задейства всеки път, когато го извикам. Трябва да стартирам само веднъж, за да добавя % към първоначалната цена.

обхватът изглежда така

<span class="hikashop_product_discount">-10%</span><span class="hikashop_product_price hikashop_product_price_0 hikashop_product_price_with_discount">51,34 €</span> </span> 

Въпрос:

Когато извикам функцията price(), тя изпълнява селекцията на тази функция и прави селекцията int. Как да направите селекцията статична и полето за избор/опция да добави към тази статична селекция процент само веднъж за опция.

Надявам се разбрахте.

Съжалявам за моя английски.

Благодаря.


person MiddleCloud    schedule 10.04.2012    source източник
comment
Мисля, че пропускате нещо, което трябва да видим: span.hikashop_product_price_full - какво е това?   -  person Mark Schultheiss    schedule 11.04.2012
comment
span.hikashop_product_price_full е ‹span class=hikashop_product_price_full› ‹span class=hikashop_product_discount›-10%‹/span›‹span class=hikashop_product_price hikashop_product_price_0 hikashop_product_price_with_discount›51,34 €‹/ span› ‹/span› ‹/span›   -  person MiddleCloud    schedule 11.04.2012


Отговори (1)


промяна

<select id="custome_vara" name="data[item][custome_vara]" size="1" onchange="price(this.value);">

to

<select id="custome_vara" name="data[item][custome_vara]" size="1">

след това добавете това:

$('#custome_vara').one('change',function(){
    price($(this+'option:selected').val());
});

РЕДАКТИРАНЕ: С надеждата да изясня намерението ви, ще публикувам някои „грешки“ тук:

Първо, липсва ви пример за маркиране на:

'span.hikashop_product_price_full:visible'

Второ:

eyy = eyy.toFixed(2)

би трябвало:

eyy = eyy.toFixed(2);

трето:

'<span class=\"hikashop_product_price hikashop_product_price_0 hikashop_product_price_with_discount\">'

може да се запише като:

'<span class="hikashop_product_price hikashop_product_price_0 hikashop_product_price_with_discount">'

Създадох тази страница за цигулка, за да ни помогне да се разберем: http://jsfiddle.net/2fxxD/

EDIT2: Мисля, че виждам това, което искате. Вижте следното в действие тук: http://jsfiddle.net/2fxxD/3/

function priceNew(val) {
    var discountedPrice = $('.hikashop_product_price_with_discount');
    var percentOff = $('.hikashop_product_discount');
    var price = discountedPrice.text().split(' ');
    var decimalPrice = price[0].replace(',', '.');
    var eyy = parseFloat(decimalPrice) * val / 100 + parseFloat(decimalPrice);
    eyy = eyy.toFixed(2);
    var newPrice = eyy + ' ' + price[1];
    discountedPrice.text(newPrice);
    percentOff.text('-' + val + '%');
    $('.hikashop_product_price').text(newPrice);
}

$('#custome_vara').one('change', function() {
    priceNew($(this + 'option:selected').val());
});

Маркиране:

<select id="custome_vara" name="data[item][custome_vara]" size="1">
    <option value="" id="custome_vara_" selected="selected">alb</option> 
    <option value="20" id="custome_vara_20">stejar auriu</option>
    <option value="30" id="custome_vara_30">moreiche</option>
</select>
<div>
<span class="hikashop_product_price_full" id="hikashop_product_price_full"> 
    <span class="hikashop_product_discount">-10%</span>
    <span class="hikashop_product_price hikashop_product_price_0 hikashop_product_price_with_discount">51,34 €</span> 
    </span>
</div>
person Mark Schultheiss    schedule 10.04.2012
comment
ty за отговор, но ви давам пример, ако var test се промени от функцията, която създадох, вземете като нова var и добавете към него %, сякаш е ново число. ex test = 40 * x/100 + 40 и следващия път, когато извикам функцията тя test = total * x/100 + total, искам да добавя само веднъж x/100 (където x е стойността от select/option) - person MiddleCloud; 10.04.2012
comment
трябва да взема първоначалната цена на var test, без да я променям от този избор/опция - person MiddleCloud; 10.04.2012
comment
Донякъде съм объркан от вашите коментари и въпрос. Използвах Трябва да изпълня само веднъж, за да добавя % към цената като основа за този отговор (изпълни веднъж). Бих предложил да промените въпроса си, за да покажете действие преди, дефинирайте действието (изберете промяна, щракнете, каквото и да е) и СЛЕД желаното изходно действие. - person Mark Schultheiss; 10.04.2012
comment
Въпрос: Когато извикам функцията price(), тя изпълнява селекцията на тази функция и прави селекцията int. Как да направите селекцията статична и полето за избор/опция да добави към тази статична селекция процент само веднъж за опция. Надявам се разбрахте. Благодаря ти. - person MiddleCloud; 10.04.2012