我遇到了javascript问题,我将其作为搜索结果页面的一部分使用,希望有人可以提供帮助。我有一个功能,检查变量' currentAmount'小于变量' total'。如果currentAmount小于total,则执行某些操作,否则不执行任何操作。
var currentAmount = document.getElementById('currentAmountHidField').value;
var total = '@Html.Raw(Json.Encode(Model.ResultCount))';
var tempScrollTop = $(window).scrollTop();
function loadMore() {
alert("current amount" + currentAmount);
alert("total" + total);
var listView = $("#propertyList").data("kendoListView");
if (currentAmount < total) {
alert("function is being run");
currentAmount = +currentAmount + 12;
document.getElementById('currentAmountHidField').value = currentAmount;
if (currentAmount >= total) {
$('#loadMoreButton').hide();
}
}
else {
alert("function is not being run");
}
listView.dataSource.pageSize(currentAmount);
listView.refresh();
tempScrollTop = $(window).scrollTop();
}
在上面,currentAmount最初总是为12.在大多数情况下,这完全正常但是对于一个搜索实例,其中total = 108,javascript正在处理函数的else子句。即表示&#34;功能未运行的警报&#34;。我无法弄清楚原因。
请注意,有警报可供测试。它会弹出&#34; currentAmount12&#34;然后&#34;总计108&#34;然后&#34;功能没有运行&#34;。这没有任何意义吗?我甚至尝试立即用2个数字做其他事情(例如从108减去12)只是为了检查那些被处理为数字的数字,它们就是这样。就像我说的那样,这适用于我能够测试的所有其他数字组合。
就像javascript一样,单独一个搜索条件,读取12超过108.有趣的是,当我在loadMore函数的第一行内将值硬化为12时,它将相应地运行但显然那不好。
任何帮助都将非常感谢。为什么javascript认为12大于108?
由于
答案 0 :(得分:2)
currentAmount
和total
都是字符串,因此它们按字典顺序进行比较,而不是数字进行比较。 '12'
大于'108'
。
使用parseInt()
将输入值转换为数字,并忽略total
周围的引号,这样它就是一个数字。
var currentAmount = parseInt(document.getElementById('currentAmountHidField').value, 10);
var total = @Html.Raw(Json.Encode(Model.ResultCount));
当你写下来时,你显然知道这是一个问题:
currentAmount = +currentAmount + 12;
因为+
之前的currentAmount
用于将其转换为数字(因此您可以添加而不是连接)。我想你不知道它也会影响比较。
答案 1 :(得分:1)
从表单控件中获取的所有值都是字符串,因此这是currentAmount
包含的值。然后突然间它应该是有意义的,例如&#34; 12&#34; &LT; &#34; 5&#34;,因为&#34; 1&#34;不到&#34; 5&#34;。
解决方案:使用parseInt()
或parseFloat()
来获取变量中的实际数字,而不是字符串 - 类似于数字但不是。
答案 2 :(得分:0)
请将您的String变量解析为所需的类型:parseFloat / parseInt
targetPositiveDimensions[currentTarget] = imageTarget.getSize();
temp[0] = targetPositiveDimensions[currentTarget].getData()[0] / 2.0f;
temp[1] = targetPositiveDimensions[currentTarget].getData()[1] / 2.0f;
targetPositiveDimensions[currentTarget].setData(temp);
calcScreenCoordsOf(new float[]{temp[0], temp[1]}, trackableResult.getPose());