2016-11-04 10 views
0

jqueryで並べ替えるリストがあります。これはデスクトップ上でうまく動作しますが、携帯電話(iphone)では並べ替えが行われません。これは私のコードです:Jqueryの並べ替えリストがモバイルで動作しない

<div class="quick-action-list"> 
    <a class="alpha">Sort A to Z</a> <a class="alpha_reverse" style="display:none;">Sort Z to A</a> 
    <ul> 
    <li><a title="A" href="">A</a></li> 
    <li><a title="B" href="">B</a></li> 
    <li><a title="C" href="">C</a></li> 
    <li><a title="D" href="">D</a></li> 
    <li><a title="E" href="">E</a></li> 
    <li><a title="F" href="">F</a></li> 
    <li><a title="G" href="">G</a></li> 
    <li><a title="H" href="">H</a></li> 
    </ul> 
</div> 

私のjQuery:

$('.quick-action-list .alpha').on('click', function() { 
     var $actions = $(this).closest(".quick-action-list").find("ul li"); 
     var alphabeticallyOrderedActions = $actions.sort(function (c, d) { 
      return $(c).find("a").text() > $(d).find("a").text(); 
     }); 
     $(this).closest(".quick-action-list").find("ul").html(alphabeticallyOrderedActions); 
     $(this).closest(".quick-action-list").find('.alpha_reverse').show(); 
     $(this).hide(); 
    }); 

    $('.quick-action-list .alpha_reverse').on('click', function() { 
     var $actions = $(this).closest(".quick-action-list").find("ul li"); 
     var alphabeticallyOrderedActions = $actions.sort(function (c, d) { 
      return $(c).find("a").text() < $(d).find("a").text(); 
     }); 
     $(this).closest(".quick-action-list").find("ul").html(alphabeticallyOrderedActions); 
     $(this).closest(".quick-action-list").find('.alpha').show(); 
     $(this).hide(); 
    }); 

代わりクリックの私は('click touchstart')またはちょうど('touchstart')を試してみましたが、これはどちらか動作しません。それは<a>をトグルしますが、リストの順序は変わりません。ここで

はフィドルのコードです:https://jsfiddle.net/06e4g53h/1/

私の質問は、なぜtouchstart(またはクリック)は、リンクをトグルしているが、実際にリストを並べ替えていませんか?どんな洞察にも感謝します。

答えて

2

Javascriptの.sort()関数を正しく使用していません。 true/falseではなく整数を返す必要があります。

代わりの

var alphabeticallyOrderedActions = $actions.sort(function (c, d) { 
    return $(c).find("a").text() < $(d).find("a").text(); 
}); 

var alphabeticallyOrderedActions = $actions.sort(function (c, d) { 
    return $(c).find("a").text() < $(d).find("a").text() ? -1 : $(c).find("a").text() > $(d).find("a").text() ? 1 : 0; 
}); 

を試みるも同様に更新フィドルを参照してください:https://jsfiddle.net/06e4g53h/3/

+0

ありがとうございました。私はそれがデスクトップで動作することを理解していない。私はこのjavascriptでエラーが発生しなかったので、正しいと仮定しました。 –

+2

Javascriptコンパイラが異なります。コンパイラが間違ったコードをうまく処理していることがあります。標準に固執すれば、あなたのアプリはすべてのプラットフォーム上で動作することが保証されます。私は同意する、これはここで実現することは困難でした。 – agoldev

+0

すごく感謝します。それは今モバイルで動作します:) –

関連する問題