2

ノックアウト検証プラグインが何らかの形でクリック ハンドラーの実行を妨げているようです。これが私の簡略化されたコードです。

HTML:

<div>
    <input type="text" data-bind="value: code" />
    <button data-bind="click: execute">VALIDATE</button>
</div

Javascript:

<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        var ViewModel = function () {
            var self = this;
            this.code = ko.observable();
            this.code.extend({ required: true });
            this.execute = function () {
                if (self.code.isValid()) {
                    alert("SUCCEED");
                }
                else {
                    self.code.valueHasMutated(); //just to show error message
                    alert("FAILED");
                }
            };
        };

        ko.applyBindings(new ViewModel());
    });
</script>

私のシナリオ:

  1. ページを読み込む
  2. [VALIDATE] をクリックします - エラー メッセージが表示され、アラートに FAILED が表示されます
  3. 入力に任意のテキストを入力し、すぐに VALIDATE をクリックします。エラー メッセージは消えますが、アラートは表示されません。
  4. VALIDATE をもう一度クリックします。SUCCEED テキストでアラートが表示されるようになりました。

最初のクリックから VALIDATE ボタンが正しく機能するように、これをどのように修正できますか?

ありがとう、イホール

4

2 に答える 2

2

3) あなたは決してボタンをクリックしません:D

フィールドからフォーカスを失うと、フィールドが検証され、テキストが削除されてボタンの位置が変わり、クリックがボタンを逃します。

http://jsfiddle.net/s2bbd/

これは、 http://jsfiddle.net/s2bbd/1/を疑うように機能します

Stackoverflow wont let me post this without code
于 2012-11-30T15:03:17.570 に答える