2011-07-05 160 views
1

我在頁面上有多個滑塊,每個滑塊都有類,每個滑塊都帶有一個複選框。加載頁面時,複選框通過PHP填充,選中或不選中。基於此,我想啓用或禁用滑塊。jQuery UI滑塊初始化

刪除無關的部分,我有:

$(".slider").slider({ 
     ... 
     disabled: function() 
     { 
      var $field = $(this).prevAll("input"); 
      return $field.is(':checked'); 
     }, 
     ... 
}); 

我甚至不知道是否有可能一個匿名函數傳遞給殘疾人選擇。這是合法嗎?它似乎並沒有工作...

當然,我可以初始化#slider1,#slider2,#slider3 ...等等,但我正在尋找最優雅和緊湊的解決方案。

這是$(this)已經超出了範圍,因爲它在選項內? JavaScript在這些情況下如何工作?提供它沒有...我知道$(this).prevAll(「輸入」)選擇器是準確的,因爲我用Firebug檢查過它。

想法?謝謝!

回答

1

甚至不知道是否有可能通過 一個匿名函數的 禁用選項。這是合法嗎?

沒有。您不能將函數引用作爲參數傳遞給該選項。

您可以立即執行該匿名函數,但this值將是錯誤的:

$(".slider").slider({ 
     ... 
     disabled: (function() 
     { 
      var $field = $(this).prevAll("input"); 
      return $field.is(':checked'); 
     })(), 
     ... 
}); 

作爲一種變通方法,你可以在.each()塊包裝代碼:

$(".slider").each(function() { 
    var $this = $(this); 
    var disabled = $this.prevAll("input").is(":checked"); 
    $(this).slider({ 
     ... 
     disabled: disabled 
     ... 
    }); 
}); 
+0

謝謝 - .each()包裹工作。雖然你的第一個代碼塊由於_this_的值而不起作用,但它看起來與我的非常相似,只不過你用另外一組括號來包裝它。你在這裏遵循什麼JS規則來使你的有效?你能解釋一下,還是指向一個涵蓋這種語法的文檔?再次感謝。 –

+0

@Jordan:不同之處在於我*在最後立即執行了使用'()'創建的函數。如果你有一個函數'foo'並且在那裏調用它('foo()'),那麼它會是一樣的,除了你聲明'foo'是內聯的。這裏有一個很好的問題/答案:http://stackoverflow.com/q/186024/497356 –

+0

非常好,謝謝! –