2011-02-10 17 views
0

.NETのバックエンドに設定されたonclickイベントを持つボタンがあります。チェックボックスをクリックすると、それはチェックボックスjQueryでonclick関数を変更する

<button class="img_button" onclick="if(buttonLoader(this)){WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('uxBtnRelease', '', true, '', 'somepage.aspx?oupid=5&fp=true', false, true))} return false;" type="button">Release</button> 
<input type="checkbox" checked="checked" id="myCheckbox"> 

で横に、ボタンのonclickの関数内URLのクエリ文字列の値を変更する必要があります。

これまでのところ、私はこれを持っている、との考えは正しいですが、私はそれが実行されます時にエラーが発生しておいてください。「キャッチされないでSyntaxError:予期しないトークンILLEGAL」

var defaultReleaseOnClick=null; 
$("#myCheckbox").click(function(){ 
    var $releaseBtn = $(".img_button"); 
    if(defaultReleaseOnClick==null) defaultReleaseOnClick=$releaseBtn.attr("onclick"); 

    var newOnClickString = defaultReleaseOnClick.toString().replace(/&fp=[a-z]+'/i,"&fp="+this.checked); 
    $releaseBtn.removeAttr("onclick").click(eval(newOnClickString)); 
}); 

私は機能を変換するために、ちょっとハックようだ知っています文字列に置き換えて、それを関数に変換しようとしますが、それ以外の方法はありません。

アイデア?

私はここにデモを設定しました:http://jsbin.com/asiwu4/edit

+0

サーバで設定されている機能は、すでに認識されていますか?次に、既定のクリックイベントを防ぎ、調整された値で既知のクリックイベントを実行します。そうでなければ、あなたのソリューションは最高のようです(良いものではありませんが、機能します)。 – jerone

答えて

0

私は実際にははるかに簡単な解決策を見つけました。私はちょうどそれぞれに必要なスクリプトを持っている2つの異なるボタンをページにレンダリングするつもりです。チェックボックスの状態は、どのボタンがクリックされて表示されるかだけを決定します。

0

は、新しいFP値を持つ非表示のフォーム要素を更新できませんでしたか?

<input type='hidden' name='fp' value='whatever' /> 

このようにしてフォームを投稿するコードを少し一般的にすることができます。

1

なぜdata- *属性を使用しないのですか?たとえば、次のように

あなた doStuff()機能(またはものは何でも、あなたのonclick属性に持っている)を使用すると、データ-url属性から読み出され、あなたのcheckbox.clickイベントで、あなたがそれに応じて変更で今
<button ... onclick="doStuff(this);" data-url="something.aspx"></button> 

。そうすれば、正規表現でJavaScriptコードを修正する必要がなくなります。これは誰にもおすすめできません。

jQuery 1.4.3では、data- *属性から読み込むためにjQuery.attrを処理する必要はありませんが、jQuery.dataを使用すると、自動的にデータが取得されます(これを設定することもできます方法)。

簡単な例:

<input type="submit" id="button" data-url="google.com"> 
<input type="checkbox" id="checkbox"> 

$('#button').click(function() { 
    alert($(this).data('url')); 
}); 

$('#checkbox').click(function() { 
    $('#button').data('url', 'bing.com'); 
}); 

http://jsfiddle.net/dSEpR/

もう一つの提案:Read up on Unobtrusive JavaScript with jQuery、はるかに簡単に私のウェブ開発者の生活を作った技術:)

関連する問題