使用嵌套逻辑运算符比较值

时间:2014-05-16 17:04:04

标签: jquery

我尝试比较选择列表中的值,但它不起作用。首先,我已经选择了值并将其与新值进行比较。因此,如果设置值为x且新选择的值不是xxx或ccc,则显示消息。我选择IS NOT运算符,因为还有更多值。

var orig_status = $("#edit-status").val();

$("#edit-status").change(function () {

      if ((orig_status = 'pending') && (
           $('#edit-status').val() != 'xxx' ||
           $('#edit-status').val() != 'ccc'
         ))
          {
                   alert('upsss');             
      }

基本上,我想在更改订单状态时进行简单检查。例如,如果订单的状态为待处理,则正常工作流程应为order_sent。如果选择了其他选项,我想显示消息。

只有在我不使用OR运算符时代码才有效。为什么会这样?

http://jsfiddle.net/pDNJX/1/

使它成功的最佳方法是什么?我使用jquery 1.3.2 谢谢

2 个答案:

答案 0 :(得分:1)

您的OR条件将始终返回真值,请使用以下

  if ((orig_status == 'pending') && !(
              ($('#edit-status').val() == 'payment_received_trustpay' ||
              $('#edit-status').val() == 'odlozena_tovar'
             )))

Demo

答案 1 :(得分:0)

你误解了OR运算符。你说“如果设定值是x,新选择的值不是xxx或ccc”。如果设定值为x并且新选择的值不是xxx且新选择的值不是ccc,则更好的方法是使用它。考虑到这一点,你可以看到它应该if (set_value = x && newly_selected_value != xxx && newly_selected_value != ccc)。采用该逻辑并使用变量名称,您可以这样写:

if (orig_status == 'pending' &&
    $('#edit-status').val() != 'xxx' &&
    $('#edit-status').val() != 'ccc'
) {
    alert('upsss');             
}

不需要比这更具特异性。

编辑: 当然,如果你想要更好,更有效的代码,你应该将jQuery对象存储在一个变量中,而不是不断地重新创建它。如果你需要检查一个巨大的值列表,你应该使用类似.indexOf的东西,并测试返回值是否等于-1