【问题标题】:JS - Click not defined?JS - 点击未定义?
【发布时间】:2013-12-16 05:06:27
【问题描述】:

我正在尝试编写此函数来单击包含特定文本的链接,唯一的问题是该链接不会指向新页面。我只需要触发一次点击,就可以执行下一个运行良好的函数。这是我的代码--

function Clickit() {
var TargetLink = $("a.box:contains('9')")

if (TargetLink.length)
    window.location.href = TargetLink[0].href
    }

这会导致无限重新加载,所以我尝试像这样修改它--

function Clickit() {
var TargetLink = $("a.box:contains('9')")

if (TargetLink.length)
    click().href = TargetLink[0].href
    }

但这给出了一个错误,点击未定义。我还在学习 JS,所以我不太确定我做错了什么。有什么想法吗?

还有没有更好的方法来编写代码而不使用“$”或“JS”,这样我就不必在我的扩展中嵌入 jquery 库?

【问题讨论】:

  • 您是否登录了 TargetLink 并试图找出它的 undefined 或其他什么?在if 条件前添加console.log(TargetLink.length)console.log(TargetLink[0].href) 并检查。
  • console.log(TargetLink.length) -- 在控制台中显示“1”
  • 那么TargetLink[0].href 有问题。尝试替换为window.location.href = 'http://www.google.com';。这应该带你到谷歌。 console.log(TargetLink[0].href) 给你什么?
  • console.log(TargetLink[0].href) 在控制台上显示一个空白区域。我不希望链接将我带到一个新页面,我只是希望它点击带有指定文本的 标签

标签: javascript jquery google-chrome-extension click contains


【解决方案1】:

错误说明了一切。您尚未定义方法 click()。如果您尝试调用 jquery .click() 方法,那么您需要一个类似的元素引用

$('a.box').click();.

只需编写一个 jquery 方法,该方法在单击具有 box 类的 时触发,条件如下,如果条件成立则返回 false。

    $(document).ready(function(){
        $('a.box').click(function(){
            //return false if condition holds
            if($(this).text().indexOf('Google') < 0)
                 return false;
            //else default return is true page navigates to respective link
        });
    });

    <a class="box" href="http://www.google.com">Google<a>

如果你不想使用 jquery,那么跟随 js 会做同样的事情。

    function linkClick(link){
        //return false if condition holds
        if(link.innerHTML.indexOf('Google') < 0)
            return false;
        //else default return is true page navigates to respective link
    }

    <a class="box" onclick="return linkClick(this);" href="http://www.google.com">Google<a>

【讨论】:

  • 现在点击锚元素可以做的不仅仅是改变window.location.href。如果要模拟单击锚元素,请使用其click() 方法。请注意,问题不在于设置 onclick 行为,而是以编程方式触发“点击”。
【解决方案2】:
/* Define the function like this: */
function clickIt(text) {
    [].slice.call(document.querySelectorAll('a.box')).some(function(a) {
        if (a.textContent.indexOf(text) !== -1) {
            a.click();
            return true;
        }
        return false;
    });
}

/* Call it like this: */
clickIt('9');

/* Alternatively, you can define the function like this
 * (which uses a more straight-forward syntax to the same effect): */
function clickIt(text) {
    var elems = document.querySelectorAll('a.box');
    for (var i = 0; i < elems.length; i++) {
        var a = elems[i];
        if (a.textContent.indexOf(text) !== -1) {
            a.click();
            break;
        }
    }
}

【讨论】:

  • @user3089477:总是乐于提供帮助! (顺便说一句,很棒的答案也可以投票(答案左侧的小向上箭头):))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多