HTML5 範囲要素が 1 つ (スライダーとしてレンダリングされる) のかなり単純なフォームがあります。そのためのコードは次のようになります。
<form name="redform" id="redform" action="/">
<input id="id" name="id" type="hidden" value="<?php echo $row['id']; ?>" />
<input id="sliderRed" name="sliderRed" type="range" value="<?php echo $data[5]; ?>" min="0" max="255" />
</form>
<p class="note">Current value: <span id="redValue">0</span></p>
<div style="text-align:center; color:#FF0000" id="redresults"></div>
これに付随するのは、スライダーが移動するたびに外部の php スクリプトを実行する jQuery です。
$(function(){
var redValue = $('#redValue');
$('#sliderRed').change(function(){
redValue.html(this.value);
});
$('#sliderRed').mouseup(function(){
$.post('process.php', $("#redform").serialize(), function(data) {
$('#redresults').html(data);
$('#redresults').fadeIn('slow').delay(2000).fadeOut('slow');
});
});
$('#sliderRed').change();
});
そのすべてが機能します。スライダーを動かすと、値がライブで更新され、スライダーが離されると PHP スクリプトが実行されます。これが奇妙なことです。範囲スライダーの最大値と最小値は 0 と 255 に設定されています。ただし、スライダーを一方の端までドラッグすると、1 または 254 しかヒットしない場合があります。これが起こります。限界まで行くこともあれば、限界まで行かないこともあります。これは、マウスを押したまま前後にドラッグしている場合でも同様です。
最大値と最小値をそれぞれ 256 と -1 に変更すると、同様の動作が観察されます。256 で最大になることもあれば、255 で最大になることもあります。下端では、-1 になることもあれば、0 までしかドラッグできないこともあります。実際の数値と関係がありますが、奇妙な "off-by-one" バグがあります。
これについて何か考えはありますか?私は完全に困惑しています...