2010-01-22 41 views
4

我在一種形式中有兩個日期選擇器。他們有不同的id,所以這不應該與類似的錯誤,如這一個。 jQuery. Apply selector to every field in a dynamic form一種形式的兩個jQuery UI日期選擇器,'缺少實例數據'

我得到在Firebug的錯誤是 「未捕獲的異常:缺少實例數據,此日期選擇」

當我選擇從「#copyTo」日期選擇器是第二日時被觸發在窗體上的日期選擇器。第一個日期選擇器完美地工作。

形式我是

 
<form name="copy" action="copyEvents.php" method="post"> 
<input type="hidden" id="copyFromHid" name="copyFromHid"/> 
<input type="hidden" id="copyToHid" name="copyToHid"/> 
Copy From <input id="copyFrom" name="copyFrom"/> 
Copy To <input type="text" id="copyTo" name="copyTo"/> 
<input type="hidden" name="gid" id="gid"/> 
<input type="submit" value="copy"/> 
</form> 

jQuery的是

jQuery('input#copyFrom','div#copyFromHistory form') 
    .datepicker({ 
     altField: 'input#copyFromHid', 
     altFormat: 'yy-mm-d', 
     dateFormat: 'd MM yy', 
     firstDay: 1, 
     beforeShowDay: function(date) { 
      return (date.getDay() == 1) ? [true, ""] : [false, ""]; } 
    }); 
jQuery('input#copyTo','div#copyFromHistory form') 
    .datepicker({ 
     altField: 'input#copyToHid', 
     altFormat: 'yy-mm-d', 
     dateFormat: 'd MM yy', 
     firstDay: 1, 
     beforeShowDay: function(date) { 
      return (date.getDay() == 1) ? [true, ""] : [false, ""]; } 
    }); 

任何建議,爲什麼第一場會的工作,但不是第二個?

回答

2

兩件事情浮現在腦海中:

一個是你的jQuery選擇:

jQuery('input#copyFrom','div#copyFromHistory form') 
jQuery('input#copyTo','div#copyFromHistory form') 

在你通過上下文/ ownerDocument參數jQuery()兩種情況下,但正在尋找DOM元素或文檔。 ..不是一個字符串。

,第二件事是:

Copy From <input id="copyFrom" name="copyFrom"/> 
Copy To <input type="text" id="copyTo" name="copyTo"/> 

複製到具有type="test"和複製從沒有(雖然默認的輸入類型是text ...所以可能不是)

我懷疑你真的想:

jQuery('input#copyFrom').datepicker(....) 
jQuery('input#copyTo').datepicker(....) 
+0

感謝喬納森,不幸的是,這並沒有解決問題。然而,你提出了一些關於context/ownerDocument的評論。我的印象是,這是一個更有效的方法讓jQuery通過傳遞包含元素,然後搜索元素來查找dom中的元素。這是不正確的? – pedalpete 2010-01-22 04:29:25

+0

@pedalpete:上下文參數按照您描述的方式工作......但期望一個DOM元素,而不是一個字符串。例如:'jQuery('input#copyFrom',document.forms [0])'將在第一個表單元素中查找copyFrom輸入。當您的選擇器使用該ID(例如#copyFrom或#copyTo)時,則不需要使用該上下文。該選擇器相當於'document.getElementById('copyFrom')'。還要注意:(引用)「在內部,選擇器上下文是用.find()方法實現的,所以$('span',this)相當於$(this).find('span')。」 (http://api.jquery.com/jQuery/#jQuery1) – 2010-01-22 14:45:05

5

容易解決,更改您的代碼是這樣的:

$('.date').live('focus', function(){ 
    $(this).datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: '1930:'+(new Date).getFullYear() 
    }); 
}); 
+1

這對我來說 – YeeKhin 2014-11-17 03:26:24

+5

工作這個答案可能包括只是一個關於什麼是爲了「修理」它做提示 – PandaWood 2016-09-26 02:35:50

相關問題