3

セカンドクリック機能をトリガーする方法についてインターネットとstackoverflowを検索しましたが、これが見つかりました。

$('.elementclass').toggle(
function(){
   //on odd
    },
function(){
   //on even
}); 

それは完璧だ。これによると、ドキュメントのURLを変更しようとしましたが、何かが機能しません。これが私のコードです:

$('.orderby').toggle(
function(){
      document.location.href+='?orderby='+$(this).val()+'ASC';
},
function(){
      document.location.href+='?orderby='+$(this).val()+'DESC';
});

$(this).val()名前や日付などはどこになりますか...

私が達成したいのは、ボタンを最初にクリックするとURLがhttp://blablabla/page.php?orderby=nameASCに変わり、2回目のクリックでURLがhttp:// blablabla/pageに変わることです。 php?orderby=nameDESC

では、私のコードの何が問題になっていますか?

ユーザーがボタンをクリックしたときにページを更新したくないので、後で$ _GETを取ることができるいくつかの(この場合は1つ)パラメーターを追加したいのですが、同じpage.document.URLを更新することができます+ =?最初のクリックと2回目のクリックでorderby=nameASC + =?orderby = nameASCを削除し、document.URLを更新する必要があります+ =?orderby=nameDESC。

4

3 に答える 3

4

ページが変更されたため、スクリプトが再度読み込まれます。あなたはあなたが持っているURLをテストする必要があります

さまざまなorderby値を処理するように更新されました

$(document).ready(function() {
  $('.orderby').click(
    function(){
     var srch = location.search;
     if (srch) srch = srch.substring(1); // lose the ?
     var val = $(this).val();

     if (srch.indexOf(val+"ASC")!=-1)
       srch = srch.replace(val+"ASC",val+"DESC");
     else if (srch.indexOf(val+"DESC")!=-1)
       srch = srch.replace(val+"DESC",val+"ASC");
       else if (!srch || srch.indexOf("orderby")!=-1) {
         // if srch was empty or contained another value than this'
         srch ='orderby='+$(this).val()+'ASC'; 
       }
     var loc = (location.search)?location.href.split("?")[0]:location.href;
     window.location = loc + "?"+srch;
  });
});

PS:document.location.hrefは何年も前に非推奨になりました。代わりにdocument.URLまたはwindow.location.hrefを使用してください

PPS:MilkyWayJoeが正しく述べているように(なぜわざわざ)、ページがサーバーから現在のページに読み込まれ、iframeやajaxされていない場合は、サーバーのボタンの値を設定し、通常のリンクを設定します。 JSがオフの場合でも動作します


UPDATE2

AJAXを使用する場合は、次のようなことを行います。

$(document).ready(function() {
  if (location.hash.indexOf(....) {
    // find the element which is mentioned in the orderby and click it
    var $elem = ....
    $elem.click(); // or trigger
  }

  $('.orderby').toggle(
    function(){
      $("#someLabel").html("DESC");
      var orderBy = $(this).val()+'ASC';
      location.hash = orderBy; // now URL will be ...#nameASC
      $("#content").load('soneserverprocess?orderby='+orderBy);
  },
  function(){
      $("#someLabel").html("ASC");
      var orderBy = $(this).val()+'DESC';
      location.hash = orderBy; // now URL will be ...#nameDESC
      $("#content").load('someserverprocess?orderby='+orderBy);
  });
});

ブラウザ内の並べ替えを使用する場合は、次のいずれかを使用してください

http://www.tripwiremagazine.com/2012/02/jquery-filter-sort-plugins.html

と持っている

$(document).ready(function() {
  if (location.hash.indexOf(....) {
    // find the element which is mentioned in the orderby and click it
    var $elem = ....
    $elem.click(); // or trigger
  }

  $('.orderby').toggle(
    function(){
      $("#someLabel").html("DESC");
      var orderBy = $(this).val()+'ASC';
      location.hash = orderBy; // now URL will be ...#nameASC
      $("#content").sort(....); // depending on plugin
    },
    function(){
      $("#someLabel").html("ASC");
      var orderBy = $(this).val()+'DESC';
      location.hash = orderBy; // now URL will be ...#nameDESC
      $("#content").sort(....); // depending on plugin
  });
});
于 2012-04-10T20:11:54.313 に答える
1

新しいページに移動する(または現在のページをリロードする)と、Javascript実行環境がリセットされます。つまり、このtoggle関数はページごとに1回だけ実行されるため、2番目の関数は使用されません。

次のようなことをしたほうがいいです:

$('.orderby').click(function() {
    if(/ASC$/.test(window.location.href) {
        // switch to DESC
    } else {
        // switch to ASC
    }
}
于 2012-04-10T20:17:26.107 に答える
0

コードに従って、ページはクリックするたびにリロードされ、ライブラリとしてロードされます。その場合、トグル関数の最初のハンドラーのみが常に実行されます。したがって、常にになりますASC

window.location.searchおそらく単純なクリックハンドラーが必要であり、ハンドラー内でhasASCまたは。を探しますDES

于 2012-04-10T20:18:18.340 に答える