Javascript 为什么在jquery中两次单击事件调用
我做了一个小插件来练习。但单击第一个跨距,它会在控制台中打印两次Javascript 为什么在jquery中两次单击事件调用,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我做了一个小插件来练习。但单击第一个跨距,它会在控制台中打印两次 $.fn.sample=函数(选项){ var设置=$.extend({ d:错 },选项) $(this.append($('').attr({id:'jitender'}).text('hi click me')) $('span')。单击(函数(){ 如果(设置d) 控制台日志(1) 其他的 控制台日志(2) }) 还这个 } $(函数(){ $('div.one')。示例({ d:是的 }) $('div.two')。示例
$.fn.sample=函数(选项){
var设置=$.extend({
d:错
},选项)
$(this.append($('').attr({id:'jitender'}).text('hi click me'))
$('span')。单击(函数(){
如果(设置d)
控制台日志(1)
其他的
控制台日志(2)
})
还这个
}
$(函数(){
$('div.one')。示例({
d:是的
})
$('div.two')。示例({
d:错
})
})
$('span')。单击将自身附加到所有span标记
更改:
$('span').click(function()
致:
$('span')。单击将自身附加到所有span标记
更改:
$('span').click(function()
致:
每次调用sample时,您都会将click事件添加到所有span标记中。我想你真的想要这样的东西:
var clickSpan = $('<span/>').attr({id:'jitender'}).text('hi click me');
$(this).append(clickSpan);
clickSpan.click(function(){
if(setting.d)
console.log(1);
else
console.log(2);
});
var clickSpan=$('').attr({id:'jitender'}).text('hi click me');
$(此).append(单击span);
单击span。单击(函数(){
如果(设置d)
控制台日志(1);
其他的
控制台日志(2);
});
每次调用sample时,您都会将click事件添加到所有span标记中。我想你真的想要这样的东西:
var clickSpan = $('<span/>').attr({id:'jitender'}).text('hi click me');
$(this).append(clickSpan);
clickSpan.click(function(){
if(setting.d)
console.log(1);
else
console.log(2);
});
var clickSpan=$('').attr({id:'jitender'}).text('hi click me');
$(此).append(单击span);
单击span。单击(函数(){
如果(设置d)
控制台日志(1);
其他的
控制台日志(2);
});
每次调用插件时,您都在所有
上设置一个事件处理程序。您可以通过更具体地使用插件中的处理程序来解决此问题,更改:
$('span').click(function(){
if(setting.d)
console.log(1)
else
console.log(2)
})
当在上单击
执行此操作时,您已经设置了两个处理程序,每个处理程序都会被调用
将上述内容更改为以下内容(这将“偶数单击”限制为在调用插件的元素中跨越):
请参见此每次调用插件时,您都在所有
上设置事件处理程序。您可以通过更具体地使用插件中的处理程序来解决此问题,更改:
$('span').click(function(){
if(setting.d)
console.log(1)
else
console.log(2)
})
当在上单击
执行此操作时,您已经设置了两个处理程序,每个处理程序都会被调用
将上述内容更改为以下内容(这将“偶数单击”限制为在调用插件的元素中跨越):
请参见此,因为您已将两个事件处理程序附加到该范围
这是因为当您调用$('span')。单击(…)
-您正在将通风处理程序附加到文档中的所有跨度
如果只想将其附加到正在应用示例插件的div中的span,请编写:$('span',this)。单击(…)
,因为您已将两个事件处理程序附加到该span
这是因为当您调用$('span')。单击(…)
-您正在将通风处理程序附加到文档中的所有跨度
如果只想将其附加到正在应用示例插件的div中的span,请编写:$('span',this)。单击(…)