2016-04-14 18 views
0

jqueryを使用して自分のサイトにドラッグ&ドロップを実装しようとしています。これは、Google Chromeブラウザの下でこれをテストすると、ほとんどの場合その作業(10回の作業のうち9回)です。私はIE11を使用するときにほとんどの時間は働いていない(例えば、10回のうち1回は働いている)。

私はこれをSharePoint 2013サイトで実装しようとしています。

私は次のコードを使用してい

$(window).load(function() { 
     $('.draggable').draggable({ 
      cursor: "move", 
      revert: "invalid", 
      opacity: 0.7, 
      snap: ".droppable", 
      snapMode: "inner" 
     }); 
    }); 

    // Dropzone 
    $(window).load(function() { 
     $('.droppable').droppable({ 
      accept: ".draggable", 
      hoverClass: 'hovered', 
      drop: positioning 
     }); 
    }); 

    function positioning(event, ui) { 
     var draggableId = ui.draggable.attr("id"); 
     var droppableId = $(this).attr("id"); 
     updateItemSprintBacklog(droppableId, draggableId); 
     window.location = window.location; 
    } 

    $(window).load(function() { 
     $('.droppableDelete').droppable({ 
      accept: ".draggable", 
      hoverClass: 'hovered', 
      drop: deleteTicket 
     }); 
    }); 

を私はwindow.loadが時々遅くするためにロードされていると信じて、しかし、私は、なぜ言うことができません。そして私はこれを解決する方法を知らない。

ありがとうございました。

+2

最初は1 '$(ウィンドウ)で.load'機能、複数の必要はありませんが、すべてのコードを置きます。 '$(document).ready'を試してみてください。これで問題が解決するかもしれません。 –

+0

$(document).ready()を試してみましたか? – MadeInDreams

+0

文書が既に完全にロードされている場合、内部的に約束を使用する文書の擬似準備完了イベントとは異なり、ウィンドウのロードイベントは発生しません。 –

答えて

2

ご回答いただきありがとうございます。 私は答えがあると思う。 私は500msのTimeOutを設定しました。今はいつも動く。すべての

setTimeout(function(){ 
     // Code 
    }, 500); 
+0

あなたは故意に500ミリ秒の遅延を読み込んで時間を追加しましたか?私にとってはあまりうまくいかない – ovod

0

@Velimir Tchatchevskyは、あなたがそれを行うことができますので$(window).loadが書き込みを複数回である必要はありません、言ったように:

<script type="text/javascript"> 

$(window).load(function() { 
    $('.draggable').draggable({ 
     cursor: "move", 
     revert: "invalid", 
     opacity: 0.7, 
     snap: ".droppable", 
     snapMode: "inner" 
    }); 

    // Dropzone 
    $('.droppable').droppable({ 
     accept: ".draggable", 
     hoverClass: 'hovered', 
     drop: positioning 
    }); 

    $('.droppableDelete').droppable({ 
     accept: ".draggable", 
     hoverClass: 'hovered', 
     drop: deleteTicket 
    }); 
}); 

function positioning(event, ui) { 
    var draggableId = ui.draggable.attr("id"); 
    var droppableId = $(this).attr("id"); 
    updateItemSprintBacklog(droppableId, draggableId); 
    window.location = window.location; 
} 

</script> 

そして、あなたもこのように、 JQuery Document Readyを使用することができます。

<script type="text/javascript"> 

$(function() { 
    $('.draggable').draggable({ 
     cursor: "move", 
     revert: "invalid", 
     opacity: 0.7, 
     snap: ".droppable", 
     snapMode: "inner" 
    }); 

    // Dropzone 
    $('.droppable').droppable({ 
     accept: ".draggable", 
     hoverClass: 'hovered', 
     drop: positioning 
    }); 

    $('.droppableDelete').droppable({ 
     accept: ".draggable", 
     hoverClass: 'hovered', 
     drop: deleteTicket 
    }); 
}); 

function positioning(event, ui) { 
    var draggableId = ui.draggable.attr("id"); 
    var droppableId = $(this).attr("id"); 
    updateItemSprintBacklog(droppableId, draggableId); 
    window.location = window.location; 
} 

</script> 
+0

迅速な対応に感謝します。私は1つの$(window).loadですべてを入れてみましたが、それはまだすべての時間働いていません。 document.readyでは、全く動作しません。 – 13reach

+0

@ 13あなたのブラウザのコンソールを確認しましたか?確認してください、そしてここにエラーコメントがあれば。 – hmd

+0

悲しいことに、私は何の誤りもありません。 – 13reach

0

毎回動作しないのは、SharePointに読み込むスクリプトファイルがたくさんあり、jQueryファイルをどこに置くかによってサイトが読み込まれる前にロードされないことがあるからです。

だからではなく、このようなjQuerysのJavaScriptの負荷を使用しようとすることができます:

window.onload = function() { 
    //your code 
}; 

それとも、jqueryのファイルがロードされているかどうかを確認する必要がjQueryのは、次のようにロードされているかどうかを確認する再帰関数を聖霊降臨祭:

(function checkForJquery() { 
    if (window.jQuery) { 
     // jQuery is loaded 
     // your code here 
    } else { 
     // jQuery is not loaded 
     checkForJquery(); 
    } 
})(); 

希望します。

関連する問題