2016-06-25 40 views
0

並べ替え可能なリストを集めて配列に変換するコードがあります。コードはドロップイベントで動作するように設定されているので、アイテムをドラッグしてドロップすると、配列が作成されて送出されます。私はこれを変更して、代わりにボタンのクリックによってトリガーされるようにする必要があります。何らかの理由でこれをクリックイベントにすると動作しません。それは素晴らしいことだボタンのクリックによってトリガーされるものに、このコードを有効にする方法上の任意のヘルプは今ボタンをクリックしてjquery sortable関数を実行する方法

$(document).ready(function(){ 

    $('#sortable-stages').sortable({ 
    update: function(event, ui) { 
     var stage = document.getElementsByClassName('stage'); 
     var stageOrder = $(this).sortable('toArray'); 
     $.get('/stages/reorder', { 'order' : stageOrder }); 
    } 
    }); 

}); 

であるとしてここで

機能です。 update:部分の上に、先頭に右に置いた場合にのみ、

は私が明らか

$(document).on('click','#stagereorderbutton', function() { 
    //... 
}); 

を試してみましたし、それはそれは、アラートをトリガーするにもかかわらず、コードを実行されませんでした。あなたがdisabledプロパティを更新していない

答えて

1

私はよくあなたの質問を理解していれば、あなたは、単にボタンclickでソート可能なアイテムの配列を取得する必要があります:

$(document).ready(function(){ 

    var items = $('#sortable-stages').sortable(/*options...*/); 
    $(document).on('click','#stagereorderbutton',function(){ 
     $.get('/stages/reorder', { 'order' : items.sortable('toArray') }); 
    }); 

}); 

JSFiddle Demo


そして、まだ別のソリューションupdateオプションが必要な場合 - あなたは、sortableスコープの外で変数を定義する範囲内でそれを更新し、ボタンclick上でそれを使用することができます。

$(document).ready(function(){ 

    var stageOrder; 
    $('#sortable-stages').sortable({ 
     update: function(event, ui) { 
      var stage = $('.stage'); 
      stageOrder = $(this).sortable('toArray'); 
     } 
    }); 
    $(document).on('click','#stagereorderbutton',function(){ 
     $.get('/stages/reorder', { 'order' : stageOrder }); 
    }); 

}); 
1

、この

$('#stagereorderbutton').sortable({ 
disabled: false, 
    update: function(event, ui) { 

    var stage = document.getElementsByClassName('stage'); 

    var stageOrder = $(this).sortable('toArray'); 

    $.get('/stages/reorder', { 'order' : stageOrder }); 


    } 
    }); 

    }); 

を試してみてください、あなたは、作成および更新するためのコードを使用していたものを私のためにこれを解決することになった、 jQuery sortable only works in document ready, not with a button

+0

まだ実行されませんでした。 –

+0

この記事を参照してくださいhttp://stackoverflow.com/questions/18660699/jquery-sortable-only-works-in-document-ready-not-with-a-button –

0

を、この記事を見たことがありますボタンクリックでのみ送信します。だから私は取得要求の周りにクリックイベントを入れ、それは働いた。

$(document).ready(function(){ 

    $('#sortable-stages').sortable({ 
    update: function(event, ui) { 

    var stage = document.getElementsByClassName('stage'); 
    var stageOrder = $(this).sortable('toArray'); 

    $('document).on('click','#stagereorderbutton',function() { 

     $.get('/stages/reorder', { 'order' : stageOrder }); 

    }) 
    } 
    }); 
}); 
+1

これは**非常に**悪い解決策です。項目をドロップするたびに、**新しい**クリックイベントがボタンに登録されます。 F.ex - アイテムを5回ドロップすると、 '$ .get'リクエストが1回のボタン' click'に対して5回トリガされます!デモを見る(数回並べてボタンをクリック) - http://jsfiddle.net/2Lqz478m/1/ –

+0

どうすれば修正できますか?私はあなたの答えでコードを試してみるとうまくいかないでしょう。 –

+0

提供されたデモでは動作しませんか? –

関連する問題