如何让我的点击捕捉器工作?

How do I make my click catcher work?

提问人:ExcellentSP 提问时间:1/22/2015 最后编辑:Alexis KingExcellentSP 更新时间:1/22/2015 访问量:598

问:

我正在尝试创建一个简单的点击捕捉器,如果您单击 javascript 将从另一个类名为 的元素中获取 href,并将您发送到它的目的地。虽然我在第 7 行和第 10 行不断收到错误,说 undefined 不是一个函数。我该如何实现这项工作?.image-class.btn

<script>
var ClickCatcher=
{
    init:function(){
        var link = jQuery('.btn')[1].href;
        var imgCatch = jQuery('.image-class');
        imgCatch.addEventListener("click", ClickCatcher.clickListener, false);
    },
    clickListener:function(){
        window.location = link;
    }
};
ClickCatcher.init();
</script>
不显眼的 javascript

评论

3赞 Paul Radich 1/22/2015
如果您已经在使用jQuery,为什么不直接使用简单的点击功能呢?
0赞 ExcellentSP 1/22/2015
我想尽可能少地使用jQuery,所以我锻炼了我的Javascript能力。我是 Javascript 的初学者,我所知道的是您必须为某些版本的 IE 的函数创建一个解决方法,这是我不想做的。另一个目标不是对 HTML 进行调整,因此我不得不在该特定部分上使用 jQuery。 @Paul 拉迪奇getElementsByClassName()

答:

3赞 atmd 1/22/2015 #1

您可以使用带有简单单击事件的 jquery 来执行此操作

jQuery('.image-class').on('click', function (){
    window.location = jQuery('.btn').eq(1).attr('href');
});

但是,如果你仍然想以你所拥有的方式写作,你可以这样做:

var ClickCatcher = {
    init: function () {
        jQuery('.image-class').on('click', function (){
            window.location = jQuery('.btn').eq(1).attr('href');
        });
    }
};

ClickCatcher.init();

只需确保在 dom 加载后触发 init 方法即可。

更新:它的一个问题是你在代码中编码了你的目标等,而不是传递它,所以它很难重用,你最好这样做:

var ClickCatcher = {
    init: function ($button, loc) {
        $button.on('click', function (){
            window.location = loc;
        });
    }
};

ClickCatcher.init(jQuery('.image-class'), jQuery('.btn').eq(1).attr('href'));

这样,内部工作与 dom 是分开的(因为您将 dom 依赖项传递给函数。

评论

0赞 ExcellentSP 1/22/2015
有没有可以先纠正我的错误,然后提供更有效的解决方案?@atmd
1赞 Paul Radich 1/22/2015 #2

@atmd展示了一种非常好的方法。如果你只是想知道你的错误是什么。您的 jQuery 状态中出现错误以获取 btn href

jQuery('.btn')[1].href

您需要调用 attr 函数,然后获取 href attr。并使用 .eq(1) 将集合减少到第一个 btn

jQuery('.btn').eq(1).attr('href);

评论

0赞 ExcellentSP 1/23/2015
我很感激。如果我能给你们俩答案,我会的。所以这里有一个赞成票!