2012-12-06 30 views
3

無處不在我使用knockout.js模板創建一個表單,可以複製和刪除。小提琴可以找到here與jquery ui datepicker Knockout.js工作除了IE瀏覽器

我編輯了腳本,用SE的litle幫助添加一個jquery-ui datepicker。小提琴的簡短版本可以在這裏找到[這裏] [2]。到目前爲止這麼好,但是在測試時我發現,除了IExplorer(各種版本)之外,所有瀏覽器都能正常工作。

問題出在這個特定的部分,但我不知道在哪裏。

script type='text/javascript'>//<![CDATA[ 
ko.bindingHandlers.datepicker = { 
    init: function (element, valueAccessor, allBindingsAccessor) { 
     var options = allBindingsAccessor().datepickerOptions || {}; 

     console.log("datepicker");       
     $(element).datepicker(options); 

     //handle the field changing 
     ko.utils.registerEventHandler(element, "change", function() { 
      var observable = valueAccessor(); 
      observable($(element).datepicker("getDate")); 
     }); 

     //handle disposal (if KO removes by the template binding) 
     ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
      $(element).datepicker("destroy"); 
     }); 

    } 
}; 

現在我們來了。當您在框外單擊時,日期選擇器不會關閉。這發生在任何瀏覽器中。

其他問題

  1. 我用這個(以及其他許多)自動更正字段。在這種情況下,大寫輸入。這在第一種形式下效果很好。但不是任何重複的表格。

    $( 「hoofdletters。 」)KEYUP(函數(E) { $(「 hoofdletters。 」)VAL(($(「 hoofdletters。」)VAL())toUpperCase())。。。。; });

  2. 當我使用唯一名稱:真,每個領域(也複製形式)將得到驗證。但我的$ _POST名稱全部重命名。我想要所有的字段名稱,例如year []而不是ko_unique_1。在刪除uniqueName時工作,但重複的表單不再驗證。

    [2]:http://jsfiddle.net/QUxyy/5/enter code here

+2

刪除「console.log」指令應該使其工作。出於某種原因,IE在控制檯打開時僅接受console.log(F12)。 – gbs

+0

謝謝!如果你添加它作爲答案,我可以接受它。我現在投票贊成。你也知道爲什麼日期選擇器保持打開狀態嗎?而我怎麼可以使用dd-mm-yyyy而不是mm-dd-yyyy? – mat

+1

將console.log更改爲window.console.log使代碼與所有瀏覽器兼容,併爲支持它的用戶保持控制檯日誌記錄 – whosrdaddy

回答

2
  1. 爲了使上IE代碼工作:刪除 「的console.log」 指令
  2. 要更改日期格式,可以定義像的結合這一個:

    數據綁定= '日期選擇器:beschikkingsdatum,datepickerOptions:{DATEFORMAT: 「DD/MM/YY」},uniqueName:真'

+0

謝謝!這工作。我upvoted。 順便說一句我發現了兩個更多的錯誤(在startpost)。如果你有一些時間,請檢查一下嗎? – mat

+0

@Mat而不是更新您的原始文章,而是提出新的問題。原來的問題已經回答,你接受了答案:) – whosrdaddy

+0

whosrdaddy>我不想用新手問題洪水的網站。 – mat

2

兩件事:

像我在評論中說,使用window.console.log(或包裝函數),而不是執行console.log以防止舊的瀏覽器,誰也不知道錯誤控制檯對象。

我使用這個(和許多其他)來自動更正一個字段。在這種情況下, 大寫輸入。這在第一種形式下效果很好。但不是 在任何重複的表單上。

取代:

$(".hoofdletters").keyup(function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); }); 

有:

$(".hoofdletters").on('keyup', '#<some root element>', function(e) { $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase()); }); 

這樣就保證了未來元素收到KEYUP處理程序需要 根元素限制DOM監測範圍爲上功能。理想情況下,這將是一個DIV元素

+0

我感謝您的幫助。我複製了你的代碼並替換了我的。我嘗試用#這樣的根元素替換你的#<某個根元素>(帶和不帶hashtag,我也試過用id或者元素本身的ID),所有這些都不起作用,我的HTML看起來像這樣: mat

+1

@Mat:爲您的範圍添加一個ID像這樣現在你可以使用$(「。hoofdletters」)。on('keyup','#Myid',... – whosrdaddy

+0

我很抱歉給你提出這些問題。你所說的和特定的字段是填充的:[對象HTMLElement] – mat

相關問題