IndexOf带小数

时间:2012-01-24 17:03:58

标签: javascript jquery

我正在寻找一些帮助来解决我正在处理的搜索表单中的错误。

我有一个多个复选框的形式,它通过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的每个函数来遍历复选框并检查它们是否出现在查询字符串中:

$('input').each(function(){
  if (returnedResults.indexOf($(this).val()) >= 0) {
   // check the box
  }
});

这在大多数情况下工作正常,但是当Size = 35.5是查询字符串中唯一的东西时,对于Size = 35似乎返回true。即。当returnResults =#Size = 35.5

时,将检查值为35的复选框

在处理小数时这是indexOf的怪癖还是我做错了什么?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

它将返回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
    }
});

注意:查询字符串不包含您应首先修复的重复参数。

答案 1 :(得分:0)

尝试:

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()检查数组中是否存在值。