2011-05-12 11 views
0

jQueryを使用してJavaScriptが有効になっている場合、すべてのページ要素を別々の読み込みからAjaxページに変換しています。私はほとんどのことをしましたが、チェックする必要があるのはonclick/onchangeイベントです。jQueryがlocation.hrefを見つけて関数で置き換えます

私はこれがあります。

$("select").each(function(){ 
     if ($(this).attr('onchange')) { 
      //CHECK FOR LOCATION.HREF 
     } 
     return false; 
    }); 

をとのようなものに変更する必要がありますに

location.href='/calendar-of-events/'+escape(this.options[this.selectedIndex].value)+'/5/2011/ 

を:

pageload('/calendar-of-events/'+escape(this.options[this.selectedIndex].value)+'/5/2011/') 

私はそれをどのように行うのでしょうか?

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

EDIT:

は、私が試した:

$("select").each(function(){ 
     if ($(this).attr('onchange')) { 
      var ocval = $(this).attr('onchange'); 
      ocval = ocval.replace('location.href=','pageload('); 
      ocval = ocval+')'; 
      $(this).attr('onchange',ocval); 
     } 
     return false; 
    }); 

しかし、それは動作しません。 onchange値は関数です。

function onchange(event) { 
    location.href = "/calendar-of-events/" + escape(this.options[this.selectedIndex].value) + "/5/2011/"; 
} 

どうすれば変更できますか?

+2

あなたはあなた自身の質問、ブラボーに答え! –

+1

質問は何ですか? – Neal

+0

私はlocation.hrefを置き換えて、URLの周りにpageload関数をラップするコードを探しています。問題は、私がonchange内に他の機能がないことを確認する必要があることです。この場合、私は文字列の最後にlocation.href =をpageload(そして、a)を置き換えることができますが、他にもある場合は、location.hrefの終わりを見つける必要があります。 – fanfavorite

答えて

1

私はあなたがonchange属性を使用して、ちょうどjQueryを使ってイベントを結合しない示唆しています。

$("select").change(function(){ 
    pageload("/calendar-of-events/"+escape($(this).val())+"/5/2011/"); 
}); 

あなたがそれを行うことができない場合は、私はあなたがonchange属性を削除、とjQueryを使用してイベントを再バインド示唆しています。

$("select").each(function() { 
    if($(this).attr('onchange')){ 
     // Get the onchange function 
     var url = $(this).attr('onchange').toString() 
      // Regex to extract the location.href 
      .match(/location\.href\s?=\s?(['"].*['"])/); 
     // If we found a match 
     if(url !== null){ 
      this.onchange = null; // Remove onchange event 
      $(this).change(function(){ // Rebind onchange 
       // Eval the location.href string, setting "this" to the select element 
       var urlstr = new Function('return '+url[1]).call(this); 
       // Call pageload with our eval'd url 
       pageload(urlstr); 
      }); 
     } 
    } 
}); 

デモ:http://jsfiddle.net/R6Zzb/10/

+0

ありがとうございます。これは私が必要とするものに近づいています。 urlはIE9で一致を返しますが、FF4ではnullを返します。どんな考え? – fanfavorite

+0

@fanfavorite:FF4は、 'location.href ='で等号の前後にスペースを追加しました。私はコードを修正しました。FF4で動作するはずです。 –

0

Javascriptは、これを行うのに役立つ一連の文字列操作を提供します。前述の例では、単純なsubstr()がおそらく実行します。より高度なものがあれば、正規表現の使用を検討することもできます。ここで

はあなたが始めるためのチュートリアルのカップルです:

http://www.w3schools.com/jsref/jsref_substr.asp
http://www.w3schools.com/jsref/jsref_obj_regexp.asp

+0

ありがとうございます。私はPHPでsubstrをたくさん使用していますが、残念ながら私の投稿で編集を見ると、私は初期関数をどのように操作するのか分かりません。一度私は場所を取得します。hrefの値は、関数を再作成して上書きすることができますが、関数内でその値を取得しています。 – fanfavorite

関連する問題