3

私はknockout.jstemplatescriptを使用して、複製および削除できるフォームを作成しました。フィドルはここにあります。

SEのちょっとした助けを借りてスクリプトを編集し、jquery-uidatepickerを追加しました。フィドルの短いバージョンは[ここ][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(function(e){$( "。hoofdletters")。val(($( "。hoofdletters")。val())。toUpperCase());});

  2. uniqueName:trueを使用すると、すべてのフィールド(重複したフォームも)が検証されます。しかし、私の$_POST名はすべて名前が変更されています。ko_unique_1の代わりにyear[]などの元のフィールド名が必要です。uniqueNameを削除すると機能しますが、複製されたフォームは検証されなくなります。

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

4

2 に答える 2

2

2つのこと:

コメントで言ったように、console オブジェクトを知らない古いブラウザーでのエラーを防ぐために、console.log の代わりに window.console.log (またはラッパー関数) を使用してください。

私はこれ (および他の多くのもの) を使用して、フィールドを自動修正します。この場合、入力を大文字にします。これは、最初のフォームでうまく機能します。ただし、重複したフォームではありません。

交換:

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

と :

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

そうすれば、future 要素が keyup ハンドラーを受け取ることが保証されます。 on 関数の DOM 監視スコープを制限するには、ルート要素が必要です。理想的には、これはDIV要素です

于 2012-12-06T15:41:08.573 に答える
2
  1. コードを IE で動作させるには: 「console.log」命令を削除します。
  2. 日付形式を変更するには、次のようなバインディングを定義できます。

    data-bind='datepicker: beschikkingsdatum, datepickerOptions: {dateFormat: "dd/mm/yy"} , uniqueName: true'

于 2012-12-06T14:32:03.767 に答える