簡體   English   中英

使用jQuery修改onclick函數

[英]Modify onclick function with jQuery

我有一個按鈕,其中包含一個onclick事件,該事件是在.NET后端設置的。 旁邊是一個復選框

<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中更改查詢字符串的值。

到目前為止,我已經有了這個,這個想法是正確的,但是運行它時我總是收到錯誤消息:“ Uncaught SyntaxError:Unexpected token 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));
});

我知道將函數轉換為字符串,進行替換,然后嘗試將其轉換回函數似乎有點kind,但是我不知道有其他方法可以做到。

有任何想法嗎?

我在這里設置了一個演示: http : //jsbin.com/asiwu4/edit

為什么不使用data- *屬性? 例如:

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

現在,在doStuff()函數(或onclick屬性中包含的所有內容)中,您將從data-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/

另一個建議: 使用jQuery閱讀Unobtrusive JavaScript ,這項技術使我的Web開發人員的生活更加輕松:)

您不能使用新的fp值更新隱藏的表單元素嗎?

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

這樣,您發布表單的代碼可能會更加通用。

我實際上找到了一個更簡單的解決方案。 我將在頁面上渲染兩個不同的按鈕,每個按鈕中都包含所需的腳本。 復選框的狀態將僅確定哪個是可見的要單擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM