如何在 JavaScript 中比较“x!= a OR b”?
Posted
技术标签:
【中文标题】如何在 JavaScript 中比较“x!= a OR b”?【英文标题】:How to compare like "x != a OR b" in JavaScript? 【发布时间】:2012-09-09 05:26:49 【问题描述】:想知道如何在 js 脚本中再添加三个 !== 或语句。 jsfriend00 提供了以下脚本作为一个壮观的答案,但问题是我犯了一个错误,没有提到还有三个文本区域下落不明。我在剩余的或 !== 条件下坚持使用 javascript。在以下脚本中,如何对以下每个 var obj 说 !==?
//查看管理员和客户之间私人网络流的文件:
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); ?>
<html>
<title>Chat</title>
<head>
<?php echo smiley_js(); ?>
</head>
<body>
<?php echo form_open('controller/function');?>
Reload chat<?php echo form_submit('reload','reload chat');?>
<?php echo form_close();?>
<?php if(isset($user_query)): foreach($user_query->result() as $row):?>
<p>Created at: <?php echo $row->created_at; ?> </p>
<p>Updated at: <?php echo $row->updated_at; ?> </p>
<p><label for="update"> <?php echo $username_sess.' said'?>:<span class="optional"></span></label>
<textarea name="update" id="update" rows="7" cols="30"><?php echo $row->clt_rep_stream ?></textarea>
<?php echo form_open('controller/function');?>
<?php echo form_hidden('user_id',$row->user_id) ?>
<p><label for="adm_update">reply to client:<span class="optional"></span></label>
<textarea name="adm_update" id="adm_update" rows="7" cols="30"> </textarea>
<?php echo form_error('adm_update'); ?>
</p>
<?php echo form_submit('submit','reply');?>
<?php echo form_close();?>
<?php echo form_open('controller/function'); ?>
<?php echo form_hidden('user_id',$row->user_id) ?>
<p>Replied at: <?php echo $row->adm_created_at; ?> </p>
<p>Updated at: <?php echo $row->adm_updated_at; ?> </p>
<p><label for="reupdate"> <?php echo $username_adm_sess.' replied:'?><span class="optional"></span></label>
<textarea name="reupdate" id="reupdate" rows="7" cols="30"><?php echo $row->adm_rep_stream ?> </textarea>
<p>
<?php echo form_submit( 'submit', 'update reply'); ?>
</p>
<?php echo form_close(); ?>
<?php endforeach; ?>
<?php endif; ?>
<script>
function autoRefresh(refreshPeriod)
var obj = document.getElementById("create");
var obj_two = document.getElementById("update");
var obj_three = document.getElementById("delete");
var obj_four = document.getElementById("reload");
function refreshIfSafe()
if (document.activeElement !== obj)
window.location.reload();
else
setTimeout(refreshIfSafe, refreshPeriod);
setTimeout(refreshIfSafe, refreshPeriod);
autoRefresh(2 * 1000);
</script>
</body>
</html>
我尝试了以下方法,但没有成功:
if(document.activeElement !==(obj || obj_two))
我在 Brad 的帖子之后尝试了以下操作,但该帖子部分有效,但任何更新或回复在前两个之后并且以下 js 被渲染为无效,这真的很令人困惑:
if(document.activeElement !== obj && document.activeElement !== obj_two)
【问题讨论】:
obj || obj_two
如果是真值,则计算为 obj
,否则计算为 obj_two
,因此条件 x !== (obj||obj_two)
可以被认为是 x !== obj_OR_obj_two_but_you_dont_know_which
。
【参考方案1】:
每个条件都是独立的。就这样对待它。
(document.activeElement !== obj) && (document.activeElement !== obj_two) && ...
如果您的元素没有像它们一样被显式调用,您也可以在循环中执行此操作,但我不知道这将如何适合您的代码,因为我不知道您的实际代码是什么样的.
【讨论】:
您提供的答案有效。我试图检查它,但收到一条错误消息,除了在 9 分钟内我不能。 我喜欢循环的想法,但完全不知道该怎么做。我发布的脚本位于我的视图文件的末尾。我在codeigniter工作; MVC。 嘿,布拉德,我犯了一个错误,除非我执行以下操作,否则我无法使您发布的代码正常工作:(document.activeElement !== obj && document.activeElement !== obj_two)【参考方案2】:未经测试,但应该可以工作:
<script>
function autoRefresh(refreshPeriod)
var elementArray = [
document.getElementById("create"),
document.getElementById("update"),
document.getElementById("delete"),
document.getElementById("reload")
];
function refreshIfSafe()
if (elementArray.indexOf(document.activeElement) !== -1)
window.location.reload();
else
setTimeout(refreshIfSafe, refreshPeriod);
setTimeout(refreshIfSafe, refreshPeriod);
autoRefresh(2 * 1000);
</script>
或者
<script>
function autoRefresh(refreshPeriod)
var elementArray = ["create", "update", "delete", "reload"];
function refreshIfSafe()
if (document.activeElement && elementArray.indexOf(document.activeElement.id) !== -1)
window.location.reload();
else
setTimeout(refreshIfSafe, refreshPeriod);
setTimeout(refreshIfSafe, refreshPeriod);
autoRefresh(2 * 1000);
</script>
【讨论】:
试过都没有用。但是,我尝试了 Brad 的解决方案,该解决方案在我这样做时有效:(document.activeElement !== obj && document.activeElement !== obj_two)。另一个问题虽然这不仅适用于我的 foreach 循环中的前两个。将发布更多代码以显示示例。【参考方案3】:你可以试试 ...不,不要!
if(!(document.activeElement in [obj,obj_two]))
// ...
顺便说一句,在比较对象时,实际上是在比较它们在内存中的引用地址……所以 '!=' 就足够了。
【讨论】:
不。不要说“参考”。这不是真的。==
和 ===
在 JavaScript 中定义良好没有谈论“引用”,实际上!=
与对象身份(或“引用”相等)正交。 (JavaScript 中唯一的引用是 l-values,类似于赋值运算符左侧的属性名称。)
不那么冗长,功能强大但被遗忘了^^
不,也不是“内存中的地址”。这也不能正常工作,in
与 keys 和 not values 一起工作 :( "a" in ["a","b"]
为假,而 "a" in "a":1,"b":1
为真。对于数组 @ 987654332@ 可以在这里工作。它使用==
进行比较,但工作得很好,因为==
是为 DOM 元素定义的(也就是说,它们是“按对象身份”进行比较的)。
请参阅***.com/questions/3649321/… 和developer.mozilla.org/en-US/docs/DOM/Node.isSameNode,了解如何通过 DOM 节点检查获得“值相等”。 (==
和 ===
总是 具有两个 DOM 元素的“对象身份”,如果一侧不是 DOM 元素,使用 ===
只是禁止类型强制)
-1 in operator 测试对象是否具有具有特定名称的属性,它不测试值。该表达式几乎肯定会返回 false,并测试为 true。而关于address in memory
的部分是垃圾,!=
使用Abstract Equality Comparison Algorithm,与内存地址无关。以上是关于如何在 JavaScript 中比较“x!= a OR b”?的主要内容,如果未能解决你的问题,请参考以下文章