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.") 발 (($ ("hoofdletters.") 발())를 toUpperCase())....; }});

  2. uniqueName : true를 사용하면 모든 필드 (복제 된 양식)도 유효성이 검사됩니다. 하지만 내 $ _POST 이름은 모두 바뀌 었습니다. 원래의 필드 이름, 예를 들어 ko_unique_1 대신 year []를 원합니다. uniqueName을 제거 할 때 작동하지만 복제 된 양식이 더 이상 유효성을 검사하지 않습니다.

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

+2

"console.log"명령을 제거하면 올바르게 작동합니다. 어떤 이유로 콘솔은 콘솔이 열려있을 때 (F12)에만 console.log를 허용합니다. – gbs

+0

감사합니다. 대답으로 추가하면 받아 들일 수 있습니다. 나는 지금 upvoted. 당신은 또한 왜 datepicker가 열린 채로 있는지 알고 있습니까? 그리고 어떻게 mm-dd-yyyy 대신 dd-mm-yyyy를 사용할 수 있습니까? – mat

+1

console.log를 window.console.log로 변경하면 코드가 모든 탐색과 호환되며 콘솔을 지원하는 사람들을 위해 콘솔 로깅을 유지합니다. – whosrdaddy

답변

2
  1. 은 IE의 코드를 작동하게하려면 제거 "을 console.log"명령
  2. 날짜 형식을 변경하려면, 당신은 같은 바인딩을 정의 할 수 있습니다 이 하나

    데이터 바인드 = '날짜 선택기 : beschikkingsdatum, datepickerOptions {dateFormat는 "일/월/년"}, uniqueName : 참'

+0

고마워요! 이 작동합니다. 나는 upvoted. Btw 나는 두 개의 버그 (시작 지점에 있음)를 발견했습니다. 시간이 있다면 확인해 주시겠습니까? – mat

+0

원래 게시물을 업데이트하는 대신 @Mat 대신 새로운 질문을하십시오. 원래 질문에 대한 답변이 있었고 답변을 수락했습니다. – whosrdaddy

+0

whosrdaddy> 초보자 용 질문으로 사이트를 넘치고 싶지 않았습니다. – mat

2

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()); }); 

그런 식으로 당신이 미래의 요소 루트 요소가에서의 DOM 모니터링 범위를 제한하는 데 필요한의 keyup 처리기를 받도록 보장 기능. 이상적으로 이것은 DIV 요소 일 것입니다.

+0

귀하의 도움에 감사드립니다. 나는 당신의 코드를 복사하고 내 것을 대체했습니다. 나는 당신의 # <일부 루트 요소>를 (해시 태그 포함 및 제외)과 같은 루트 요소로 대체하려고 시도했다. 루트 또는 요소 자체의 ID로 시도했는데 모두 작동하지 않았다. 내 HTML은 다음과 같이 보였다. mat

+1

@Mat : Span에 ID를 추가하십시오. "class ="발굽이 필요합니다. ('keyup', '#Myid', ... – whosrdaddy

+0

이 질문에 당신을 괴롭히는 것이 유감입니다.하지만 그랬 잖아. " 이렇게하면 $ (". hoofdletters ")를 사용할 수 있습니다. 당신이 말한 것과 특정 필드는 다음과 같이 채워져 있습니다 : [object HTMLElement] – mat

관련 문제