1

列の 1 つに対して requiredFieldValidator を構成しましたが、既存の行に対して期待どおりに機能します。タブで移動するか、クリックして新しい行の編集を開始すると、列から移動するときにバリデーターが起動しません。コミットするために新しい行 (列にデータがない状態) から移動してから行に戻ると、バリデーターが機能するようになりました...ただし、エディターにデータを入力してから削除した場合のみです。

つまり、新しい行の場合、requiredFieldValidator は、列に実際に何かを入力するまで何もしません。列を空白のままにすると、その列は起動せず、その目的が無効になります。興味深いことに、彼らが提供する例 (http://mleibman.github.com/SlickGrid/examples/example3-editing.html) にも同じ問題が見られます。

4

4 に答える 4

0

ローマの場合、最初のelseにエラーがあり、戻り値はfalseです。それ以外の場合、値が変更されていなくても、セルの変更はtrueを返します。私はこれを試しました、そしてそれは働きます。

this.isValueChanged = function () {
        var attuale = $input.val();
        if((attuale.length > 0) && (attuale != defaultValue))
            return true;
        else if((attuale == defaultValue)&&(attuale.length > 0))
            return false;
        else if((attuale.length == 0) && ((undefined === defaultValue )||(defaultValue == "")))
            return true;
        else
            return false;
};
于 2013-02-10T08:14:16.920 に答える
0

同じ問題があり、初期化されていない場合、理想的には defaultValue を未定義または null に設定する必要があると思います。そこで、TextEditor を次のように変更しました。

function TextEditor(args) {
    var $input;
    var defaultValue;
    var scope = this;

    this.loadValue = function (item) {
        defaultValue = item[args.column.field] || null;
        $input.val(defaultValue);
        $input[0].defaultValue = defaultValue;
        $input.select();
    };

    this.isValueChanged = function () {
        return $input.val() != defaultValue;
    };

    ....

デフォルトの defaultValue を null に設定し、isValueChanged を簡素化します。

于 2013-02-01T14:02:39.603 に答える
0

私は同意します、自分でこの動作に遭遇しただけです。これが解決策です。

this.isValueChanged 関数の内容を次のように変更します。

if(($input.val().length > 0) && ($input.val() != defaultValue))
            return true;
    else if(($input.val() == defaultValue)&&($input.val().length > 0))
            return true;
    else if(($input.val().length == 0) && ((undefined === defaultValue )||(defaultValue == "")))
            return true;
    else
            return false;

何らかの理由で、最初の対話中に defaultValue が設定されていません。私の推測では、それを "" に初期化すると、未定義をチェックする必要はありません。

いずれにせよ、defaultValue はセルの前の値を保持するため、それが空で編集中の最初のセルである場合は未定義であり、その後は他のすべての空のセルに対して "" に設定されます。

問題は、セル エディターが入力を検証するために、この関数が値が変更されたことをグリッドに通知する必要があることです。提供された実装では、式は常に false を返します。

$input.val() == "" evaluates to true and then the expression 
!($input.val() == "" && defaultValue == null)) evaluates to false

これは、defaultValue が継続的に未定義であることを意味します。

それが理にかなっており、私のコードがお役に立てば幸いです。

于 2012-12-17T05:27:44.643 に答える