1

问题:我们正在一个非常受限的 CMS 上建立一个网站。我们需要替换anchor的href中的某个函数。不幸的是,加载的内容是外部的,这段代码不起作用:

jQuery:

$(document).ready(function() {
    $('a[href*="show_upsell_dialog"]').each(function(e){
            $(this).attr('href', $(this).attr('href').replace('show_upsell_dialog(', 'more_details_1('));
    });   
});

HTML位:

<a href="javascript:show_upsell_dialog(1238)">Details</a>

问:为什么?我如何使它工作?

4

3 回答 3

1

如果您无法访问 $.get 或 $.get 返回的承诺,您的选择非常有限。

另一种方法是使用全局 ajax 回调,当调用具有预期选项的请求时,它会自行解除绑定。

function completeCallback (e, xhr, options) {
    // updated
    if (options.url == "/ejax-order-step/") {
        $(e.currentTarget).off('ajaxComplete',completeCallback);
        $('a[href*="show_upsell_dialog"]').attr('href',function(href){
            return href.replace('show_upsell_dialog(', 'more_details_1(');
        });
    }
}
$(document).ajaxComplete(completeCallback);

但是请注意,需要在它正在侦听的请求完成之前定义此回调。

不过,在您的情况下,我不明白您为什么不能这样做:

window.show_upsell_dialog = window.more_details_1;
于 2013-07-22T14:12:15.033 回答
-1

你可以试试这段代码:

$(function() {
    $('a[href*="show_upsell_dialog"]').each(function(){
        $(this).attr('href', $(this).attr('href').replace('show_upsell_dialog', 'more_details_1'))
    });
})
于 2013-07-22T12:57:59.520 回答
-1

给你的函数一个名字并在 setTimeout(yourFuncName, 1000); 中调用它

如果 1 秒太短,请尝试 2​​。我只是在猜测,但 setTimeout 有时会很有帮助......

于 2013-07-22T14:03:04.363 回答