Na wstęp kod:
<fieldset id='topicStyle_fieldset'> <ul style='border-bottom: 1px solid #D5DDE5'> <li class='field'> <input class='input_text color {hash:true}' type='text' id='topicColor' name='topicColor' value="{$formData['topicColor']}" onChange='sumPrice( this );' /> </li> <li class='field'> <input class='input_text color {hash:true}' type='text' id='topicShadow' name='topicShadow' value="{$formData['topicShadow']}" onChange='sumPrice( this );' /> </li> <li class='field checkbox'> <input class='input_check' type='checkbox' id='topicBold' name='topicBold' value="{$formData['topicBold']}" <if test="$formData['topicBold']">checked='checked'</if> onClick='sumPrice( this );' /> </li> <li class='field checkbox'> <input class='input_check' type='checkbox' id='topicItalic' name='topicItalic' value="{$formData['topicItalic']}" <if test="$formData['topicItalic']">checked='checked'</if> onClick='sumPrice( this );' /> </li> </ul> <ul> <li class='field'> </li> </ul> </fieldset> <script type='text/javascript'> /* Prices */ var topicColor_price = parseFloat( 15.00 ); var topicShadow_price = parseFloat( 30.00 ); var topicBold_price = parseFloat( 10.00 ); var topicItalic_price = parseFloat( 10.00 ); /* INIT */ var totalPrice = 0; var yourForumGold = parseFloat( 50 ); /** * Count Amount to buy items * * @param object HTML Object * @return void */ function sumPrice( elementID ) { if( $( elementID ) == null ) { return getTotalAmount(); } /* Finding actions... */ var elementObject = $( elementID ); /* Get value of price! */ var elementPrice = elementObject.id + '_price'; /* Sum... */ totalPrice += eval( elementPrice ); /* More than You can buy? */ if( totalPrice > yourForumGold ) { $('totalPriceLabel').className = 'totalPrice_fail'; } else { $('totalPriceLabel').className = 'totalPrice_ok'; } getTotalAmount(); } /** * Return Amount * * @param void * @return string */ function getTotalAmount() { /* Save total amount :-) */ $('totalPriceLabel').innerHTML = totalPrice; } sumPrice(); </script>
W czym stoi rzecz? Mam listę i w niej pewne elementy, w tym 2 inputy i 2 checkBox. Każda ich zmiana jak widać powoduje dodanie kwoty. I tu pojawia się problem. Bo za każdą zmianą dodaje, a ja nie mam pomysłu jak to zapisać, aby zapisywał stan zmiennych i w zależności od ich wartości ( w tym szczególnie inputów ) odejmował kwoty. Pomożecie?
Pozdrawiam,
Largo
<script type='text/javascript'> /* Prices */ var availablePrices = new Hash( { 'topicColor_price' : 15.00, 'topicShadow_price' : 30.00, 'topicBold_price' : 10.00, 'topicItalic_price' : 5.00 } ); /* States */ var availableStates = new Hash( { 'topicColor_state' : 0, 'topicShadow_state' : 0, 'topicBold_state' : 0, 'topicItalic_state' : 0 } ); /* INIT */ var totalPrice = 0.00; var yourForumGold = parseFloat( {$this->memberData['member_fg']} ); /** * Count Amount to buy items * * @param object HTML Object * @return void */ function sumPrice( elementID ) { if( $( elementID ) == null ) { return getTotalAmount(); } /* Finding actions... */ var elementObject = $( elementID ); /* Get value of price! */ var elementPrice = elementObject.id + '_price'; /* Sum... */ if( availableStates.get( elementObject.id + '_state' ) ) { totalPrice -= availablePrices.get( elementPrice ); } else { totalPrice += availablePrices.get( elementPrice ); } /* More than You can buy? */ if( totalPrice > yourForumGold ) { $('totalPriceLabel').className = 'totalPrice_fail'; } else { $('totalPriceLabel').className = 'totalPrice_ok'; } getTotalAmount(); } /** * Save State * * @param string ID of HTML Element * @return void */ function saveState( stateName, isCheckbox ) { if( $( stateName ) ) { /* Checkbox? */ if( isCheckbox ) { if( $( stateName ).checked ) { availableStates.set( stateName + '_state', 1 ); } else { availableStates.set( stateName + '_state', 0 ); } } else { /* Normal box? */ if( $F('topicColor').blank() ) { availableStates.set( stateName + '_state', 1 ); totalPrice -= availablePrices.get( stateName + '_price' ); } else { availableStates.set( stateName + '_state', 0 ); } } } } /** * Return Amount * * @param void * @return string */ function getTotalAmount() { /* Save total amount :-) */ $('totalPriceLabel').innerHTML = totalPrice.toFixed(2); } sumPrice(); </script>
Prawie sobie sam poradziłem, ale dalej mam jeden problem. Dla checkBox te operacje są poprawne, ale dla input nie. Nie mogę określić czy dany input ma treść. Jeżeli ma, dostaję raz cenę, a nie X razy na kliknięcie, ale to sobie zrobię. Jak się dostać do wartości input? Używam Prototype, a Color Picker jest pobrany stąd.