2012-01-30 64 views
1

此代碼創建一個自定義顯示&隱藏事件。它從herejQuery ui datepicker與自定義事件衝突嗎?

// show & hide events 
$.each(["show", "hide", "toggleClass", "addClass", "removeClass"], function() { 
    var oldFn = $.fn[this]; 
    $.fn[this] = function() { 
     var hidden = this.find(":hidden").add(this.filter(":hidden")); 
     var visible = this.find(":visible").add(this.filter(":visible")); 
     var result = oldFn.apply(this, arguments); 
     hidden.filter(":visible").each(function() { 
      $(this).triggerHandler("show"); 
     }); 
     visible.filter(":hidden").each(function() { 
      $(this).triggerHandler("hide"); 
     }); 
    }; 
}); 

它運行良好,直到我在jQuery UI中使用datepicker。 $("input[type=text]").datepicker()。我得到這個錯誤

jquery-ui.js:7473Uncaught TypeError: Cannot call method 'keydown' of undefined

但如果我註釋掉 「addClass」 & 「removeClass」 像這樣

$.each(["show", "hide", "toggleClass"/*, "addClass", "removeClass"*/], function() {

它工作一次。下面是測試http://jsfiddle.net/Lf9Hv/2/

任何人有任何想法?

謝謝。

回答

1

嗯,日期選擇器確實類操作相當數量在設置datepickers起來,你可能不希望與它渣土,同時完成。也許先運行datepicker,然後在完成後設置你的事件監聽器?

編輯:和第二眼,我可以肯定地看到至少有一件事,你這樣做是錯誤的。您需要在「文本」周圍添加引號

$("input[type='text']").datepicker() 

使用兩種不同類型的引號可讓您像這樣嵌套它們。 (嵌套它們的其他方式也有效。)同樣,我不能告訴你,這是否會解決所有的問題,但它肯定不能傷害。

+0

我試圖移動'$(「輸入[類型=文本]」)日期選擇器()'此之上,但我得到了一個新的錯誤'遺漏的類型錯誤:不能調用方法「寬度」 undefined'的 – trung 2012-01-30 22:56:52