更改现有onclick函数的值

时间:2009-01-22 18:36:50

标签: javascript jquery

我有一个页面通过iframe从预先存在的内容管理系统中提取一页html内容,其内容我无法直接更改。我想使用jquery动态地改变一些链接和按钮位置。

对于页面中的链接,我能够更改

的href attr值
<a href="/content.asp">more</a> 

从content.asp到content2.asp使用

$("a[href^='/content.asp']")
.each(function()   {       this.href = this.href.replace("content.asp",          "content2.asp");   });

但是,拉入的页面也有包含javascript onclick功能的表单按钮,例如

<INPUT type="button" value="Add to basket" onClick="document.location='/shopping-basket.asp?mode=add&id_Product=1076';">

我基本上想用jquery来选择任何这样的按钮并将shopping-basket.asp更改为shopping-basket2.asp

如何选择这些按钮/ onclick功能并更改位置字符串?

5 个答案:

答案 0 :(得分:3)

对此解决方案并不感到自豪,但它有效....

var getid = /id_Product=(\d+)/;
$('input[type="button"]').each(function() {
    var onclick = String(this.onclick);
    var id = onclick.match(getid);
    if(id) {
        this.onclick = function() {
            window.location = "/shopping-basket2.asp?mode=add&id_Product=" + id[1];
        };
    }
});

答案 1 :(得分:1)

http://docs.jquery.com/Selectors/attributeContains#attributevalue

$("input[onClick*='shopping-basket.asp']").each( ... )

答案 2 :(得分:0)

为您的按钮添加一个唯一的id,然后从javascript脚本中引用它:

document.getElementById("idOfButton").onClick

只需将值设置为新的文本字符串。

答案 3 :(得分:0)

我认为我会更新这个答案,因为我在JQuery 1.4.1中尝试了几种组合

1)onclick = function() - 不工作

$("input").each(function() {
    $(this).onclick = function() {
        window.location.href= 'http://www.google.com';
        return false;
    }
}

2)$ newclick = eval(...)无法正常工作

$("input").each(function() {
    $jscript = "window.location.href= 'http://www.google.com'; return false;"
    $newclick = eval("(function(){" + $jscript + "});");
    $(this).onclick = newclick;

}

顺便说一句。 $ newclick被评估为未定义

3)在JQuery 1.4.1中有效的新答案

$("input").each(function() {
     $(this).click(function() {
        window.location.href = "http://www.google.com";
        return false;
 });

我搜索了JQuery API,没有onclick文档。看起来像click()是要走的路。 如果我犯了任何错误,请告诉我。

干杯

答案 4 :(得分:-1)

使用.attr方法更改属性。

$("a").each(function(){
  $(this).attr("href","content.asp");
});

您也应该能够替换硬编码的onClick文本。要选择这些按钮,您可以抓住所有按钮:

$("input.convertMe").each(function(){...});

或者您可以将类添加到您特别感兴趣的按钮中:

<input type="button" class="convertMe"...>

完成这两项中的任何一项后,您只需运行每个测试其onClick属性,并确定是否需要进行任何更改:

$("input.convertMe").each(function(){
  // Test onClick attr, and replace string.
});