使用jQuery修改onclick函数

时间:2011-02-10 23:00:59

标签: javascript jquery function onclick

我有一个按钮,里面有一个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));
});

我知道将函数转换为字符串,进行替换,然后尝试将其转换回函数似乎有点hacky,但我不知道其他任何方法。

有什么想法吗?

我在这里设置了一个演示:http://jsbin.com/asiwu4/edit

3 个答案:

答案 0 :(得分:1)

为什么不使用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/

另一个建议:Read up on Unobtrusive JavaScript with jQuery,这种让我的网络开发人员生活更轻松的技巧:)

答案 1 :(得分:0)

无法使用新的fp值更新隐藏的表单元素吗?

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

这样,发布表单的代码可能会更加通用。

答案 2 :(得分:0)

我实际上找到了一个更简单的解决方案。我只是要向页面呈现两个不同的按钮,每个按钮都包含所需的脚本。复选框的状态仅确定单击哪一个可见。