Изменить значение существующей функции onclick - PullRequest
0 голосов
/ 22 января 2009

У меня есть страница, которая вытягивает через iframe страницу HTML-контента из уже существующей системы управления контентом, содержание которой я не могу напрямую изменить. Я хочу использовать jquery для динамического изменения некоторых ссылок и расположения кнопок.

Для ссылок на странице мне удалось изменить значения атрибута href

<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 ]

3 голосов
/ 22 января 2009

Не очень горжусь этим решением, но оно работает ....

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 голос
/ 22 января 2009

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

$("input[onClick*='shopping-basket.asp']").each( ... )
0 голосов
/ 20 мая 2010

Просто подумал, что обновлю этот ответ, так как попробовал несколько комбинаций в 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 нет. Похоже, что щелчок () - это путь. Дайте мне знать, если я сделал какую-либо ошибку (ы).

Приветствия

0 голосов
/ 22 января 2009

Дайте вашей кнопке уникальный id, а затем назовите ее из сценария JavaScript с помощью:

document.getElementById("idOfButton").onClick

Просто установите значение для новой текстовой строки.

0 голосов
/ 22 января 2009

Атрибуты изменяются методом .attr .

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

Вы также сможете заменить жестко запрограммированный текст. Чтобы выбрать эти кнопки, вы можете выбрать все из них:

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

Или вы можете добавить классы к кнопкам, которые вас особенно интересуют:

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

После того, как вы выполнили одно из этих двух действий, вы просто проходите тестирование каждого атрибута onClick и определяете, нужно ли вам вносить какие-либо изменения:

$("input.convertMe").each(function(){
  // Test onClick attr, and replace string.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...