2011-11-25 96 views
0

的變化事件我有下一段代碼:取消一個jQuery UI幻燈片

$("#slider-cpu").slider({ 
     range: "min", 
     value: 0, 
     min: 0, 
     max: cpu.length - 1, 
     slide: function(event, ui) { 
      $("#cpu").html(cpu[ui.value]); 
     }, 
     change: refreshPrice 
    }); 

和3那樣的稱爲滑動CPU,滑動閘板和滑動-HDD。 3個滑塊調用refreshPrice()函數,並且它在更改函數執行時運行良好。

的問題是,我有一個按鈕預設各種價值觀,正是這一點:

$(".preset").click(function(){ 
     var values = $(this).attr('data-item'), 
      cpu = values[0], 
      ram = values[2], 
      hdd = values[4]; 

     $("#slider-cpu").slider("value", cpu); 
     $("#slider-ram").slider("value", ram); 
     $("#slider-hdd").slider("value", hdd); 
    }); 

此代碼不正是我想要的東西,用新的更改值。問題是,在每次調用slider("value", item)時都會調用change,並且調用refreshPrice() 3次(並且會執行ajax調用)。

我試圖做.slider("value", cpu).slider("change", function(){});重置更改選項,但它沒有奏效。

我該怎麼做?

回答

1

我會做這樣的事情,改變你的功能,這樣你就可以把它關掉

var pauseRefresh = false; 

function refreshPrice() { 
    if (pauseRefresh) return; 

    // existing code 
} 

$(".preset").click(function(){ 
    var values = $(this).attr('data-item'), 
     cpu = values[0], 
     ram = values[2], 
     hdd = values[4]; 

    pauseRefresh = true; 

    $("#slider-cpu").slider("value", cpu); 
    $("#slider-ram").slider("value", ram); 
    $("#slider-hdd").slider("value", hdd); 

    pauseRefresh = false; 

    refreshPrice(); 
}); 
+0

乾淨的解決方案,謝謝@Hogan! – udexter

1

如果您只是想在用戶滑動滑塊後調用refreshPrice,請將其綁定到stop。在用戶完成移動滑塊之後發生。

+0

嘿安德魯!這不完全是我問的,但它也會幫助我!謝謝 – udexter