我有一个按钮,里面有一个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
答案 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');
});
另一个建议:Read up on Unobtrusive JavaScript with jQuery,这种让我的网络开发人员生活更轻松的技巧:)
答案 1 :(得分:0)
无法使用新的fp值更新隐藏的表单元素吗?
<input type='hidden' name='fp' value='whatever' />
这样,发布表单的代码可能会更加通用。
答案 2 :(得分:0)
我实际上找到了一个更简单的解决方案。我只是要向页面呈现两个不同的按钮,每个按钮都包含所需的脚本。复选框的状态仅确定单击哪一个可见。