2012-01-24 9 views
1

私が取り組んでいる検索フォームでバグを洗い流すための助けを探しています。小文字の添え字

私は、AJAX経由でPHPに送信し、深いリンクで使用するためのクエリ文字列を返す複数のチェックボックスのフォームを持っています。クエリ文字列は、クエリ文字列に表示されるページ上のチェックボックスをチェックするために使用されます。

クエリ文字列は次のようになります。

var returnedResults = #Size=35.5&Size=36&Colour=red&Material=leather 

私はこのようなチェックボックスのシリーズと形があります。私は、チェックボックスにチェックをループにjQueryの各機能を使用しています

<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"> 
... 

をクエリ文字列に表示される場合は、次のようになります。

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

これはmo size = 35.5がクエリ文字列内の唯一のものである場合、Size = 35の場合にtrueを返すように見えます。すなわち、返された値= 35.5のときチェックボックス= 35.5

これは小数点を扱うときにindexOfの奇妙なものか、間違っていることがありますか?

ご協力いただきありがとうございます。

+1

'returnedResults'に' .split( '&') 'を使用することをお勧めします – Johan

答えて

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()を使用して値が配列に存在するかどうかを確認しました。

+0

ありがとうございます - 素晴らしい作品です! – guyroutledge

1

indexOfは、渡された文字列が元の文字列内に存在するかどうかをチェックするだけなので、trueを返します。

シナリオを考慮して、ロジックが正しくありません。クエリ文字列を解析し、サイズが存在するかどうかを確認する必要があります。

これを試してください。

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 
    } 
}); 

注:クエリ文字列に重複するパラメータが含まれていない場合は、最初に修正する必要があります。

+0

文字列に複数のサイズ値が含まれている場合、これは機能しますか? – cambraca

+0

クエリ文字列には重複したparamが含まれないのが理想です。 OPは最初にそれを修正する必要があります。 – ShankarSangoli

+0

まあ、phpを使うと、 'Size []'のような名前でいくつかの値を送ることができ、phpはそれらを配列にします。これはここにあるようですが、私は信じています。 – cambraca