我尝试比较选择列表中的值,但它不起作用。首先,我已经选择了值并将其与新值进行比较。因此,如果设置值为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运算符时代码才有效。为什么会这样?
使它成功的最佳方法是什么?我使用jquery 1.3.2 谢谢
答案 0 :(得分:1)
您的OR条件将始终返回真值,请使用以下
if ((orig_status == 'pending') && !(
($('#edit-status').val() == 'payment_received_trustpay' ||
$('#edit-status').val() == 'odlozena_tovar'
)))
答案 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