0

我有以下代码,它使用上一个 url 提供的信息在选项链接列表中正确选择了一个选项,但是尽管在代码运行时视觉上选择了正确的链接,但结果看起来好像链接没有被主动选择.

$(document).ready(function () {
    $("a.optionLink:contains('"+ (document.referrer.split('/').pop()) +"')").click();
});

我需要添加执行或触发代码吗?提前致谢。

4

1 回答 1

0

相关代码在几个方面存在问题:

首先,异常处理代码(try/catch)在函数之外,这不是一个好主意。

其次,它正在扫描页面中的所有链接以查找可能为空的表达式(在这种情况下,可能会触发数百个链接)。

最后但并非最不重要的一点是,引荐来源网址可能不包含确切的短语作为链接。例如,England & Wales是相关的http://www.legalcounseldirect.com/England&Wales(显示Resource not found错误,但这是另一回事)。我会考虑使用查询字符串或片段动态生成指向搜索页面的链接,这样就不需要这种 hack。

也就是说,在大多数情况下可能会奏效的解决方案可能是:

任何一个:

$(document).ready(function () {   
    setTimeout(function(){
        try{
            var lastSegment = document.referrer.split('/').pop();
            if(lastSegment != "") {
                var matches = $("#idFilterColumns a.optionLink:contains('"+ lastSegment  +"')");
                if(matches.length === 1) {
                    matches.click();
                }
            }
        }catch(e){} 
    },100);
});

也许:

$(window).on('load', function(){
    try{
        var lastSegment = document.referrer.split('/').pop();
        if(lastSegment != "") {
            var matches = $("#idFilterColumns a.optionLink:contains('"+ lastSegment  +"')");
            if(matches.length === 1) {
                matches.click();
            }
        }
    }catch(e){}
});

由 2 个不同的事件触发:

  • 第一个是在文档准备好时触发的,这可能是在生成其余的表单功能时。由于无法确保在所有相关侦听器都准备好之后执行脚本(并且显然不是),因此使用超时来推迟click事件的触发。

  • 第二个代码段由稍后的事件触发,即窗口的加载。预计(但未经测试)所有事件附件都已完成,因此它可能会在不设置超时的情况下工作。

您可以一次尝试其中一个。没有必要同时使用它们。

于 2013-08-11T23:15:39.937 回答