私はしばらくこのループに陥っています。基本的に、スライダーの値が変化したときに何らかのアクションを実行するスライダーがあります。最初にチェックを行い、チェックが通らない場合は、スライダーの値をリセットする必要があります。しかし、スライダーの値をリセットすると、それが変わります!そして、私は立ち往生しています。これが私のコードです:
スライダー:
$(element).slider({
min: 0,
max: 10,
step: 1,
value: initialValue,
animate: false,
slide: _updateOnSlide,
change: _performAction
});
var _performAction = function(evt, ui){
if (CT.travel.atLeastOneStepPresent()){
var id = $(this).attr("id");
_updateOnSlide(evt, ui);
if (id != "travelTime"){//se è il tempo non aggiorno
CT.makeQuery();
}
CT.timeline.update();
}else{
alert("you can't do this");
$(this).slider("value", 0);
_updateOnSlide(evt, ui);
}
}
問題は、$(this).slider("value", 0);
別の変更イベントをトリガーすることです! 誰でもこれを解決する方法を知っていますか?
スライダーをスライドさせるのではなく、ボタンをクリックしてスライダーの値を変更しているため、変更機能を使用する必要があります。
編集 - evt.originalEvent は常に未定義です (この console.log(evt.originalEvent) のように cosole.log を作成した場合) が、何らかの奇妙な理由で console.dir にすると表示されます。しかし、残念ながら問題は解決しません。ここに、スライダーの値を変更するコードの一部を追加します (以前に忘れていたことを許してください)。
$('.plus').click(function(event){
var sliderCurrentValue = $( this ).next().slider( "value" );
$(this).next().slider( "value", sliderCurrentValue + 1 );
});
ご覧のとおり、値は最初にプログラムによって変更されるため、evt.originalEvent のチェックはとにかく役に立ちません。
EDIT 2 - 私はこれから抜け出す方法を見つけましたが、もっと良い方法があることを願っています:
alert("you can't do this");
//destroy the slider
$(this).slider("destroy");
// recreate the slider
_makeSelector(this);
「変更」イベントにバインドされた関数を削除して値をリセットするだけでも機能すると思いますが、これを行うより良い方法があることを願っています!