JQuery UIのスライダのslide
とchange
イベントで複数のスライダを同時に更新しようとしています。JQuery UIリアクティブスライダ(スライダの変更時に同時に複数のスライダを更新する)
私は、次のようなコードを持っている:
$(function() {
var totalSliders = 0;
$(".slider").each(function() {
var value = parseInt($(this).text(), 10);
$(this).empty().slider({
value: value,
range: "min",
animate: true,
orientation: "horizontal",
slide: updateSliders,
change: updateSliders
});
totalSliders++;
});
function updateSliders(event, ui) {
var activeSlider = this;
$(".slider").slider("value", $(activeSlider).slider("value"));
};
$("#update").click(function() {
$(".slider").slider("value", 10);
return false;
});
});
これはスライダーにslider
のクラスですべてを回すことに成功しました。私は、スライダーを動かすたびしかし、私は次のエラーを取得する:updateSliders(event, ui)
の次の実装が正常に動作します
function updateSliders(event, ui) {
var activeSlider = this;
$(".slider").not(activeSlider).slider("value", $(activeSlider).slider("value"));
};
:
Uncaught RangeError: Maximum call stack size exceeded
は、私はまた、updateSliders
の次の実装を試してみました
function updateSliders(event, ui) {
console.log($(this).slider("value"));
};
質問:
最大呼び出しスタックサイズのエラー?私はすべてのスライダを同時に更新したい。
編集:
それが違いを作る場合、私は唯一、slider
のクラスにページ上に3つの要素を持っています。
非常に良い!私は '$(activeSlider).slider(" value ")'を 'ui.value'に最適化できることも発見しました。 – user1834646
あなたが気にしないなら、 '!event.originalEvent'を説明できますか?直感的ではないように思えます。「これが元のイベントでなければ、復帰します。 – user1834646
jQueryから取得する「イベント」オブジェクトは、イベントが発生したときにブラウザが作成する「実際の」イベントオブジェクトではありません。それはラッパーです。そのラッパーオブジェクトの "originalEvent"プロパティは、ネイティブブラウザイベントへのアクセスを提供します。そのようなネイティブイベントがない場合は、スライダーへのプログラムによる更新(つまり、JavaScriptでスライダーの「値」を設定する)のために、「変更」ハンドラーが呼び出されていると推測できます。理にかなっている? – Pointy