[英]IndexOf with decimals
我正在寻找一些帮助,以解决我正在处理的搜索表单中的错误。
我有多个复选框的形式,这些复选框通过AJAX提交给PHP,并返回用于深度链接的查询字符串。 查询字符串用于检查查询字符串中出现的页面上的复选框。
查询字符串如下所示:
var returnedResults = #Size=35.5&Size=36&Colour=red&Material=leather
我有一个带有一系列复选框的表单,如下所示:
<input type="checkbox" name="Size[]" id="35" value="35">
<input type="checkbox" name="Size[]" id="35.5" value="35.5">
<input type="checkbox" name="Size[]" id="36" value="36">
...
<input type="checkbox" name="Colour[]" id="red" value="red">
...
我正在使用jQuery的each函数来遍历复选框,并检查它们是否出现在查询字符串中:
$('input').each(function(){
if (returnedResults.indexOf($(this).val()) >= 0) {
// check the box
}
});
这在大多数情况下都可以正常工作,但是当Size = 35.5是查询字符串中唯一的内容时,对于Size = 35似乎返回true。 即。 returnResults =#Size = 35.5时,选中了值为35的复选框
处理小数时这是indexOf的怪癖还是我做错了什么?
非常感谢您的提前帮助。
它将返回true
因为indexOf
仅检查传递的字符串是否存在于原始字符串中。
考虑到这种情况,您的逻辑是不正确的。 您应该解析查询字符串,然后检查大小是否存在。
尝试这个。
function getParameterByName(name)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if(results == null)
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
$('input').each(function(){
if (getParameterByName("Size") == $(this).val()) {
// check the box
}
});
注意:querystring不包含重复的参数,您应该首先解决该问题。
尝试:
var returnedResults = "#Size=35.5&Size=36&Colour=red&Material=leather&Size=40.4";
var results = new Array();
results = returnedResults.split('&');
$.each(results, function(i) {
var start = results[i].indexOf('=');
results[i] = results[i].substr(start+1);
});
$('input').each(function(i){
if ($.inArray($(this).val(), results) > -1) {
$(this).attr("checked", "checked");
}
});
小提琴: http : //jsfiddle.net/alpacalips/7p3jJ/3/
我所做的是使用.split和.substr方法解析查询字符串中的值。 然后将值放入数组中,然后使用$ .inArray()来检查值是否存在于数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.