2011-02-10 110 views
0

我有一個按鈕,其中有一個onclick事件,它在.NET的後端設置。在它旁邊是一個複選框用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:意外的標記非法」

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 2011-02-10 23:09:20

回答

0

我居然發現了一個更簡單的解決方案的技術。我只是將兩個不同的按鈕呈現給頁面,每個頁面都有需要的腳本。該複選框的狀態將僅確定哪一個可見被點擊。

0

無法更新與新的FP值一個隱藏的表單元素?

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

這樣,您的代碼發佈表單可能會更通用一些。

1

爲什麼不使用data- *屬性?例如:

<button ... onclick="doStuff(this);" data-url="something.aspx"></button> 

現在,在您doStuff()功能(或者你已經得到了你的onclick屬性),你從數據url屬性讀取,並在checkbox.click事件中,你相應地改變它。這樣你就不必處理用正則表達式來修改你的JavaScript代碼,這是我不會推薦給任何人的。

從jQuery 1.4.3開始,你甚至不需要處理jQuery.attr從data- *屬性中讀取數據,但是你可以使用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,這讓我的網絡開發生活變得更輕鬆:)