2

jquery ドラッグ & ドロップでノックアウト js を使用しています。Chrome、Firefox、IE9 ではうまく機能しますが、IE8 ではうまく機能しません。実際のコードを投稿することはできませんが、バグを再現できる jsfiddle の例を作成しました。http://jsfiddle.net/wired1/P9hns/20/をご覧ください 。最新の Firefox、Chrome、および IE9 でうまく動作します。ただし、IE8 でドラッグしようとすると、次のエラーが発生します。

IE8 エラー #1

SCRIPT5007: プロパティ 'options' の値を取得できません: オブジェクトが null または未定義の jquery-ui.1.8.18.js、行 1412 文字 13

jquery ui で参照されているコードは次のとおりです。

$.ui.plugin.add("draggable", "cursor", {
start: function(event, ui) {
    var t = $('body'), o = $(this).data('draggable').options;
    if (t.css("cursor")) o._cursor = t.css("cursor");
    t.css("cursor", o.cursor);
},
stop: function(event, ui) {

        var o = $(this).data('draggable').options;
        if (o._cursor) $('body').css("cursor", o._cursor);

}
});

これは stop 関数内の変数 o の宣言です: var o = $(this).data('draggable').options;

jquery ui でこれらの 2 行をコメント アウトすると、次のエラーが発生します。

IE8 エラー #2

SCRIPT5007: プロパティ 'options' の値を取得できません: オブジェクトが null または未定義の jquery-ui.1.8.18.js、行 1439 文字 38

それは次のことを示しています。

$.ui.plugin.add("draggable", "scroll", {
start: function(event, ui) {
    var i = $(this).data("draggable");
    if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
},
drag: function(event, ui) {

    var i = $(this).data("draggable"), o = i.options, scrolled = false;
........................

これは、上記のスニペットの最後の行で、o = i.optionsです。

{scroll: false} を jqueryui ドラッグ可能なオプションとして設定すると、エラーはなくなりますが、それでも機能しません。

ドラッグを開始すると、マウスのクリックが解除されていなくても、すべてのイベントが順番に発生するようです (jsfiddle でコード テストを実行している場合は、コンソールを見てログを確認してください)。

それはjquery uiの問題ですか、それとも何か間違っていますか? これに関するヘルプは大歓迎です。

4

1 に答える 1

2

observableArray問題は、「開始」コールバックで生徒をあなたから削除したことです。これにより、KO は関連する DOM 要素を削除/切り離します。ただし、ドラッグ可能のコードは、ドラッグされた要素がまだ使用可能であることを期待しています (ヘルパーを指定した場合でも)。

IE<9 は切り離された要素を別の方法で処理し、エラーが発生していると推測しています。observableArrayこれは、関連付けられたドラッグ可能な要素が確実に不要になった場合 (つまり、ドラッグが停止した場合) にのみ、生徒を から削除することで解決できます。

更新されたフィドルは次のとおりです。http://jsfiddle.net/P9hns/32/

于 2012-06-14T01:44:05.460 に答える