2012-05-30 121 views
1

我试图让IF语句一个变量里面的工作...下//贝宝变量parseFloat与IF语句

看文本...当我开始价格:如果( 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

您不能在JavaScript中像这样在表达式内嵌入if语句。该语言不允许。

将值赋给变量,然后将正在创建的对象的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会在这一点上是不确定的,如在亚光B的答案评论中指出,只需在第一定义item对象之外的quantity变量将可能是一个简单的修复。)

+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

所以,我将不得不使数量变量全球?我不确定我的理解 – larin555