2010-05-02 187 views
1

我有高度的jQuery UI的DatePicker的(我的選項)來傳遞一個jQuery對象的函數:

function bindDatepicker($obj) 
{ 
    if ($obj == null) $obj = $("input.date"); 

    $obj.datepicker(
    { 
     appendText: '(yyyy-mm-dd)', 
     autoSize: true, 
     changeMonth: true, 
     changeYear: true, 
     closeText: 'Done', 
     dateFormat: 'yy-mm-dd', 
     defaultDate: '+1m', 
     minDate: +1, 
     numberOfMonths: 2 
    } 
); 
} 

我把這個在每一頁的開頭綁定它輸入的元素:

$(function() { 
    bindDatepicker($("input.date")); 
}); 

這工作正常。我使用$ .load()加載表單元素時出現問題。我無法將DatePicker附加到任何加載的元素。例如:

$("#id").load("urlToLoad", function() { 
    bindDatepicker($("input.date")); 
}); 

將表單元素加載到div中就好了,但不會附加DatePicker。

這是爲什麼?我很難過。 :(

感謝, 湯姆

回答

2

您需要使用jQuery的.live()方法將「聽」爲匹配您的選擇標準,任何新的元素

編輯:。所以我原來的答覆.live()方法只適用於綁定事件,正如你在你的註釋中指出的那樣,如果沒有綁定事件,你實際上不能綁定到一個事件,所以我決定抽取一個樣本並看看如果我可以重現你的問題,我可以。什麼是更加偉大的壽,是如果我試圖使用基於屬性的選擇器,而不是類選擇器,它的工作完美。

因此而不是做

$('input.date').datepicker(); 

我堅持一個新的屬性上有所謂的「類型」,並有以下選擇:

$('[type=date]').datepicker(); 

和一切工作。

我不知道這是爲什麼,但我只能認爲這是一個與jQuery的錯誤。

+0

請您詳細說明一下嗎?我試圖使用$ .live()函數,但是你會將它綁定到什麼事件? 請幫我理解一旦使用$ .load()加載元素,它們存在於DOM中,對嗎?應該觸發回調函數,並且選擇器將遍歷所有「input.date」元素的DOM,對吧?請告訴我,如果我在這裏誤導......謝謝! – TomWilsonFL 2010-05-03 00:10:55