2012-05-30 3 views
1

Я пытаюсь получить IF заявления работает внутри переменной ...parseFloat с IF заявления

Посмотрите на текст под // PAYPAL переменных ... когда я начинаю с цене: если (item.quantity = "4")

product.find('.product-buy').click(function(e) { 
        //check if option is set 
        var option = $(this).attr('option') || ''; 
        var item = { 
         group: product.parent().attr('id'), 
         id: product.attr('id'), 
         option: option || 'NA', 
     LOOK HERE---->>> quantity: parseInt(product.attr('minimum'+option),10) || 1, 
         minimum: parseInt(product.attr('minimum'+option),10) || 1, 
         //TEST 
         gap: parseFloat(product.attr('gap'+option)), 
         //TEST 

         //paypal variables 
         name: product.attr('name'+option), 

    AND HERE---->>> price: if(item.quantity="4") 
         { 
          parseFloat(product.attr('price'+option)) 
          } 
          if(item.quantity="8") 
         { 
          parseFloat(product.attr('price2'+option)) 
          } 
          if(item.quantity="12") 
         { 
          parseFloat(product.attr('price3'+option)) 
          } 

         shipping: product.attr('shipping'+option), 
         number: product.attr('number'+option), 
         handling: product.attr('handling'+option) 
        }; 
        addToCart(item,true); 
        e.preventDefault(); 
       }).fadeTo(0, 0.7).hover(hoverHandler(300, 1), hoverHandler(300, settings.buttonsOpacity)); 
       //set currency sign 
       if (settings.currencySign) { 
       product.find('.product-currency').html(settings.currencySign); 
       } 
     }); 

Так поясню, я хочу значение item.price для parseFloat в 'цена атрибут', если количество атрибут равно 4 ... для parseFloat в 'price2 атрибут', если количество равно 8 ... и parseFloat 'price3' атрибут, если количество равно 12.

Как вы можете видеть, на данный момент я пробовал:

    price: if(item.quantity="4") 
        { 
         parseFloat(product.attr('price'+option)) 
         } 
         if(item.quantity="8") 
        { 
         parseFloat(product.attr('price2'+option)) 
         } 
         if(item.quantity="12") 
        { 
         parseFloat(product.attr('price3'+option)) 
         } 

Но это не работает. Есть идеи?

спасибо!

+2

Это только я, или все ваши сравнения фактически назначены? – j08691

+0

'=' -> присваивание, '==' и '===' -> сравнение – elclanrs

ответ

1

Вы не можете вставлять оператор if внутри выражения, подобного этому в Javascript. Язык не позволяет этого.

Назначьте значение переменной, а затем присвойте атрибут price объекта, который вы создаете для этой переменной.

var price = 0; 
if(item.quantity==="4") { 
    price = parseFloat(product.attr('price'+option)) 
} 
else if ... { 
} 
... 

var item = {..., price: price, ...} 
+0

Но 'item.quantity' все равно не существует. Вам также нужно будет вычислить это заранее. – pimvdb

+0

Вы также можете использовать автономную функцию анонимности и вернуть результат. – Zirak

+0

Да, я скопировал код инструкции if, фактически не прочитав его. То же самое. Вы не можете a) назначать переменные для результата блока if, b) ссылаться на атрибуты объекта в том же самом документе, определяющем объект. –

0

Глядя на другом комментарии, что это правильно, но вы также можете поместить все в прямоприменяемой анонимной функции, которая возвращает значение цен:

price: (function(){ 
    var price; 
    ... 
    return price; 
}()) 
+0

В то время, когда функция выполнена, 'item.quantity' все равно не будет существовать (что необходимо для вычисления« цены »). – pimvdb

0

Заканчивать тройной оператор.

price: item.quantity == "4" ? parseFloat(product.attr('price'+option)) : (
    item.quantity == "8" ? parseFloat(product.attr('price2'+option)) : (
        item.quantity == "12" ? parseFloat(product.attr('price3'+option)) 
    ) 
), 

(Хотя это не учитывает тот факт, что item.quantity будет неопределенным в этой точке, как было указан в комментариях к ответу Мэтта Б. Просто определение quantity переменных вне item объекта в первом бы, вероятно, быть простым исправлением.)

+0

Не задано ли значение переменной несколько строк раньше? -> количество: parseInt (product.attr ('minimum' + option), 10) || 1, – larin555

+0

@ user1388136 См. Http://stackoverflow.com/questions/10823791/parsefloat-with-if-statement/10823879#comment14089508_10823822 – JAB

+0

Итак, мне нужно было бы сделать переменную количества Global? Я не уверен, что понимаю – larin555

Смежные вопросы