0

jQuery UI(バージョン1.8.24)に基づくウィジェットがあります。このウィジェットは、resizable表示されるとすぐにアイテムで埋められ、ユーザーのアクションに基づいてクリアして再度埋めることができます。おおまかに次のようになります。

<div class="dialog ui-resizable">
    <div class="dialog-header">…&lt;/div>
    <div class="dialog-contents">…&lt;/div>
    <div class="dialog-controls">…&lt;/div>
    <div class="ui-resizable-handle ui-resizable-e" style="z-index: 1000"></div>
    …
</div>

次のコードを使用して、サイズ変更可能にキャストされます。

myDialog.resizable(
            { alsoResize: myDialog.find(".dialog-contents"),
              minHeight: minH,
              minWidth: minW,
              maxHeight: maxH,
              maxWidth: maxW
            }).show().focus();
updateMyDialogContents();

ウィジェットのサイズがまだ手動で変更されていない場合は、の内容とともに拡大および縮小しdiv.dialog-contentsます。これは望ましくありません。ただし、サイズ変更ハンドルのいずれかをドラッグすると、希望どおりに動作し始めます。つまり、内部で何が起こってもサイズが一定に保たれdiv.dialog-contentsます。

最初からサイズを一定に保つにはどうすればよいですか?

セット_mouseDragのメソッドと、DOM要素の属性の実際の値に気づきました。通常、ウィジェットをレンダリングした直後に自分で属性を設定しますが、にいくつかの内部要素があるため、これは機能しません。resizablewidthheightstylestylealsoResize

座標デルタがゼロのプログラムで呼び出し_mouseDragて、ウィジェットが実際の"mousedrag"イベントがトリガーされたと見なす方法はありますか?これが可能であれば、ウィジェットが初期化された直後にマウスのドラッグをシミュレートすることで、この問題を解決します。

私は次のようなことを試しました

dlg.data("resizable").
    _mouseDrag(new $.Event("mousedrag",
                           { dragState: "end",
                             dragDeltaT: 0,
                             dragDelta: 0,
                             dragDeltaX: 0,
                             dragDeltaY: 0 }));

さまざまなイベントがあり、明らかな成功はありません(一部の属性が常に欠落しているように見えるため、エラーがスローされます)。

編集1:jQueryバージョン。

4

1 に答える 1

0

私はこのハックに落ち着きました:

        var noStretchingHack = function (widget) {
            var contents = widget.find(".dialog-contents");
            var hDiff = widget.height() - contents.height();
            widget.css({width: "600px",
                        height: (400 + hDiff) + "px",
                        top: "0px",
                        left: "0px"});
            contents.css({width: "600px",
                          height: "400px"});
            widget.trigger("resize");
        };

これをコンテンツアップデーター関数へのコールバックとして渡し、コンテンツが初めて入力された直後に実行されるようにします。私は自分自身を誇りに思っていません。jQueryUI1.8.24に存在する場合は、より洗練されたソリューションについて聞きたいと思います。

于 2012-10-11T16:17:26.670 に答える