【问题标题】:document.referrer if statement is not workingdocument.referrer if 语句不起作用
【发布时间】:2019-07-25 02:33:56
【问题描述】:

document.referrer 条件总是显示前一个语句为真,但它不应该是

if (document.referrer == "https://parks.com/parks/falls" || "https://parks.com/parks/events/falls" || "https://parks.com/parks/promotions/falls" || "https://parks.com/parks/go-green/falls" || "https://parks.com/parks/info/falls") { 
console.log("Don't Show Modal - coming from a Falls page", document.referrer);
} else {
console.log("Show Modal - coming from some other Page", document.referrer);
$( window ).on('load', function() {
   console.log("modal firing");
   $('#modal').modal({
   backdrop: 'static',
   keyboard: false,
   show: true
   });
});
}

当用户从 Falls 页面进入网页时,模式不应显示。如果用户从任何 Falls 页面以外的页面进入网页,则应该显示模式。

【问题讨论】:

    标签: javascript if-statement conditional-statements


    【解决方案1】:

    你的条件不对。 您应该在每个“子条件”中将变量与常量进行比较。

    if (document.referrer == "https://parks.com/parks/falls"
    || document.referrer == "https://parks.com/parks/events/falls"
    || document.referrer == "https://parks.com/parks/promotions/falls" 
    || document.referrer == "https://parks.com/parks/go-green/falls"
    || document.referrer == "https://parks.com/parks/info/falls") {
    

    也许更短:

    const domains = ["https://parks.com/parks/cummins-falls", "https://parks.com/parks/events/falls", "https://parks.com/parks/promotions/falls", "https://parks.com/parks/go-green/falls", "https://parks.com/parks/info/falls"];
    if (domains.includes(document.referrer)) {
    

    IE 支持

    if (domains.indexOf(document.referrer) !== -1) {
    

    【讨论】:

    • 没问题。如果这是对您帮助最大的答案,请将其选为已接受。
    【解决方案2】:

    这是您的 if 子句实际返回的内容:

    // prints "https://parks.com/parks/events/falls"
    console.log(document.referrer == "https://parks.com/parks/cummins-falls" || "https://parks.com/parks/events/falls" || "https://parks.com/parks/promotions/falls" || "https://parks.com/parks/go-green/falls" || "https://parks.com/parks/info/falls") 

    这是因为使用 OR 运算符 (||),如果无法将左侧表达式强制转换为 true,那么它将返回右侧的表达式。

    因此,在您的情况下,document.referrer == "https://parks.com/parks/cummins-falls" 的计算结果为 false,因此它返回 "https://parks.com/parks/events/falls" 的结果,在 Javascript 中,布尔运算的计算结果为 true,因此它在 OR 运算符和后面的 OR 运算符。

    有关详细信息,请参阅truthy concept 上的文档。

    你真正想要的:

    var falls = ["https://parks.com/parks/cummins-falls",  "https://parks.com/parks/events/falls", "https://parks.com/parks/promotions/falls", "https://parks.com/parks/go-green/falls", "https://parks.com/parks/info/falls"];
    
    console.log(falls.indexOf(document.referrer) > -1);

    【讨论】:

      【解决方案3】:

      您的情况不正确。 你应该使用这个:

      if (document.referrer == "https://parks.com/parks/cummins-falls" || document.referrer == "https://parks.com/parks/events/falls" || document.referrer == "https://parks.com/parks/promotions/falls" || document.referrer == "https://parks.com/parks/go-green/falls" || document.referrer == "https://parks.com/parks/info/falls") { 
          console.log("Don't Show Modal - coming from a Falls page", document.referrer);
      } else {
          console.log("Show Modal - coming from some other Page", document.referrer);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-16
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2017-10-22
        • 2018-05-11
        • 2015-05-05
        • 1970-01-01
        相关资源
        最近更新 更多