我一直在从另一个编码器接管一些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'自动'解析'到锚点的钩子(这怎么可能?)
我试图摆弄项目,但我没有设法重现这种行为,所以在代码中的某个地方有一个可以实现这种机制的技巧。
如何解决这个问题的任何帮助都会很棒。
答案 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)]();
});
选择器,找到所有锚点href:$("[href^=#]")
单击命名空间功能:bind( "click"
从href:this.hash.substring(1)
substring删除第一个字符。
现在我需要在我接手的代码的上下文中找到类似的内容。