2016-01-18 74 views
0

我有一个javascript函数从样式属性中获取属性。如果语句在应该为true时返回false

然后我检查属性是否等于一个特定的点。

但是,当我的属性值为console.log()时,它如预期的那样,但是当我测试属性值时,它返回false?

这里是我的代码和截图:

var $paywhirlWidget = $(".payment-signup-section .container .row .col-xs-12:first-child iframe#paywhirl_frame"), 
     $widgetRow = $(".payment-signup-section .container .row .col-xs-12:first-child"); 

$.fn.inlineStyle = function (prop) { 
    var styles = this.attr("style"), 
     value; 

    styles && styles.split(";").forEach(function (e) { 
     var style = e.split(":"); 
     if ($.trim(style[0]) === prop) { 
      value = style[1]; 
     } 
    }); 
    return value; 
}; 


function checkForChanges() { 
    if ($(window).width() < 998) { 
     console.log(Boolean($paywhirlWidget.inlineStyle("height").toLowerCase() == "620px")); 
     console.log($paywhirlWidget.inlineStyle("height").toLowerCase()); 
     if ($paywhirlWidget.inlineStyle("height").toLowerCase() == "620px") { 
      console.log("im here!!"); 
      $widgetRow.css("display", "none"); 
     } 
    } else { 
     if ($paywhirlWidget.inlineStyle("height") == "300px") { 
      console.warn("im here too!!"); 
      $widgetRow.css("display", "none"); 
     } 
    } 
} 

setInterval(checkForChanges, 500); 

作为一个例子,这里是“620px”测试,你可以看到,第一console.log()返回false,即使第二个显示值正是我所测试的!

error

这确实是令人困惑,因为我无法理解为什么当Boolean测试返回假,这显然是真值。

+0

快速注:没有理由永远使用'布尔'。比较的结果已经是一个布尔类型。 –

+0

是的,但在console.log中使用'Boolean'告诉我是真是假,它只是类型检查,以确保它是if语句失败,而不是我的代码是一个滋扰。 – SkullDev

+0

仍然不需要。无论如何,控制台都会正确报告。如果不自己复制它是不可能的,但是有可能返回值的末尾有空白吗?尝试['value = style [1] .trim()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)。 –

回答

2

看起来你的样式属性在值的开始处有一个空格。尝试使用trim

$.trim($paywhirlWidget.inlineStyle("height").toLowerCase()) === "620px" 

,或者使得它修剪更新inlineStyle插件:

value = $.trim(style[1]); 
2

简单,只需使用jQuery的height()它返回一个代表像素数

if ($paywhirlWidget.height() == 620) 
相关问题