2

こんにちは、ユーザーがインクリメント/デクリメントボタンを押したままにして、10進数値をすばやく簡単にインクリメント/デクリメントできる「UpDown」ボタンを取得しようとしています。ajaxToolkit:NumericUpDownExtender を使用してこれを試してみましたが、これはボタンのクリックによる増分/減分のみを許可するようです。値がパーセンテージであるため、これはかなり扱いにくいです。ASP.NET 内でこれを処理するためのより良い方法のアイデアはありますか?

4

2 に答える 2

0

このスクリプトの参照を ScriptManager コントロールの Script コレクションに追加します。

Sys.Extended.UI.NumericUpDownBehavior.prototype._clearClickInterval = function () {
    if (this._clickInterval != null) {
        window.clearInterval(this._clickInterval);
        this._clickInterval = null;
    }
};

Sys.Extended.UI.NumericUpDownBehavior.prototype._setDownClickInterval = function () {
    this._clearClickInterval();
    this._clickInterval = window.setInterval(this._clickDownHandler, 200);
};

Sys.Extended.UI.NumericUpDownBehavior.prototype._setUpClickInterval = function () {
    this._clearClickInterval();
    this._clickInterval = window.setInterval(this._clickUpHandler, 200);
};

Sys.Extended.UI.NumericUpDownBehavior.prototype.addIntervalHandlers = function () {
    this._clickInterval = null;

    this._buttonMouseUpHandler = Function.createDelegate(this, this._clearClickInterval);

    if (this._bUp) {
        this._upButtonMouseDownHandler = Function.createDelegate(this, this._setUpClickInterval);
        $addHandler(this._bUp, 'mousedown', this._upButtonMouseDownHandler);
        $addHandler(window, 'mouseup', this._buttonMouseUpHandler);
    }

    if (this._bDown) {
        this._downButtonMouseDownHandler = Function.createDelegate(this, this._setDownClickInterval);
        $addHandler(this._bDown, 'mousedown', this._downButtonMouseDownHandler);
        $addHandler(window, 'mouseup', this._buttonMouseUpHandler);
    }
};

var legacyInitialize = Sys.Extended.UI.NumericUpDownBehavior.prototype.initialize,
    legacyDispose = Sys.Extended.UI.NumericUpDownBehavior.prototype.dispose;

Sys.Extended.UI.NumericUpDownBehavior.prototype.initialize = function () {
    legacyInitialize.apply(this);
    this.addIntervalHandlers();
};

Sys.Extended.UI.NumericUpDownBehavior.prototype.dispose = function () {
    legacyDispose.apply(this);
    this._clearClickInterval();

    if (this._upButtonMouseDownHandler) {
        $removeHandler(this._bUp, 'mousedown', this._upButtonMouseDownHandler);
        $removeHandler(window, 'mouseup', this._buttonMouseUpHandler);
        this._upButtonMouseDownHandler = null;
    }

    if (this._downButtonMouseDownHandler) {
        $removeHandler(this._bDown, 'mousedown', this._downButtonMouseDownHandler);
        $removeHandler(window, 'mouseup', this._buttonMouseUpHandler);
        this._downButtonMouseDownHandler = null;
    }

    this._buttonMouseUpHandler = null;
};

確かではありませんがaddIntervalHandlers()、エクステンダー インスタンスで関数を明示的に呼び出す必要がある場合があります。最後に次の行を追加すると、このスクリプトをチェックできます$find("ctl00_SampleContent_NumericUpDownExtender4").addIntervalHandlers(): このページのブラウザーのコンソールから実行します: NumericUpDown デモンストレーション最後のエクステンダーは、マウス ボタンの保持を処理します。

于 2013-05-11T19:04:22.057 に答える