带小数的IndexOf
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的每个函数循环检查复选框,并检查它们是否出现在查询字符串中:
$('input').each(function(){
if (returnedResults.indexOf($(this).val()) >= 0) {
// check the box
}
});
这在大多数情况下都很好,但当查询字符串中只有Size=35.5时,对于Size=35,它似乎返回true。即当返回Results=#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");
}
});
Fiddle:http://jsfiddle.net/alpacalips/7p3jJ/3/
我所做的是使用.split和.substr方法解析查询字符串中的值。然后将这些值放入一个数组中,然后我使用$.inArray()检查数组中是否存在这些值。
相关文章:
- 货币代码为欧元-金额的格式不应包含小数
- 为什么indexOf在这个js代码中不起作用
- 键按正则表达式以查找具有负值的小数
- Angularjs通过过滤器获取indexOf
- indexOf具有2个参数
- .indexOf()不适用于特定元音
- 将数字四舍五入到两位小数
- 对字符串使用IndexOf来挑选某些单词
- 用于Javascript中小数输入的Regex,小数前有1到3位,小数后有1到三位
- 不允许在文本框中使用小数
- 如果window.location.href.indexOf('player=1')添加样式
- 在javascript中使用小数
- inArray,indexOf在二维数组中
- 在数字字符串的最后两个数字上加上小数
- 为什么我得到“;没有方法'indexOf'"在ExtJS4.2中尝试在网格上使用缓冲渲染器时出错
- 正则表达式,不允许在javascript中使用负数和小数以及零
- RegEx将有理文字与小数匹配,但不完全有理文字除外
- 将数字格式化为货币,两位小数
- 为什么 0 的偏移会截断小数
- 带小数的IndexOf