jquery $ .action。<href>单击以锚定标记</href>

时间:2013-11-20 01:10:52

标签: jquery

我一直在从另一个编码器接管一些node.js代码,我偶然发现了一个我无法理解其机制的技巧。

该项目正在使用node.js 0.8.25 / jQuery 1.6.2(如果这很重要)

当我添加锚点(在该特定项目中)

<a href="#clickme">Click ME</a>  

,jQuery代码是

$.action.clickme = function (e, tail) {
    alert('hello world!');
};

注意:我将clickme函数添加到操作命名空间,其中clickme也是我的锚中的HREF

如果我在项目的上下文中点击该链接, 它会触发OnClick事件并显示“Hello word”警报(??)

所以$ .action。使用href ='#HREF'自动'解析'到锚点的钩子(这怎么可能?)

我试图摆弄项目,但我没有设法重现这种行为,所以在代码中的某个地方有一个可以实现这种机制的技巧。

如何解决这个问题的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

你可以将委托用于未来使用#绑定元素(也许你想要一个[href]作为选择器?也可能想检查散列是否实际上针对存在的函数?:

$(document).delegate('a[href=^="#"]', 'click', function(event){
    var action = $.action[this.hash.substring(1)];
    if(action) {
        action.call(this, event);
    }
});

如果您使用/更新到jquery 1.7 +:

$(document).on('click', 'a[href=^="#"]', function(event){
    var action = $.action[this.hash.substring(1)];
    if(action) {
        action.call(this, event);
    }
});

你可以在你的方法中使用它:

$.action.clickme = function (e, tail) {
    alert('hello world!' + this.href); // this is the a-element that was clicked on
};

答案 1 :(得分:0)

我花了很长时间才发现但是 这里是我正在寻找的缺失代码

$("[href^=#]").bind( "click", function() {
    $.action[this.hash.substring(1)]();
});

http://jsfiddle.net/QaB86/

选择器,找到所有锚点href:$("[href^=#]")

单击命名空间功能:bind( "click"

从href:this.hash.substring(1)

中取#

substring删除第一个字符。

现在我需要在我接手的代码的上下文中找到类似的内容。