我正在尝试创建一个jQuery插件,以在目标元素之后输出一些示例文本。
我的代码是这样的
jQuery功能
(function($){
$.fn.getVideo = function(){
return this.each(function() {
$(this).wrapAll('<div class="wrap-getvideo" />')
$wrapGetvideo = $(this).closest('.wrap-getvideo');
$wrapGetvideo.append('<div class="title"></div>');
$(this).on('keyup', function(){
$wrapGetvideo.find('.title').html('Testing');
});
});
}
}(jQuery));
调用函数
$(document).ready(function(){
$('.getvideo').getVideo();
});
HTML
<input class="getvideo" type="text" placeholder="Enter video URL">
<input class="getvideo" type="text" placeholder="Enter video URL">
<input class="getvideo" type="text" placeholder="Enter video URL">
小提琴 http://jsfiddle.net/8pbpm547/
正如你可以看到上面的HTML,我已经使用了插件3输入框,每个输入框都应该在keyup时输出旁边的示例文本'Testing'。但只有最后一个显示。
我的代码有什么问题,如何在所有3个项目上输出文本。
答案 0 :(得分:2)
您正在jquery中使用$wrapGetvideo
更新$(this).closest('.wrap-getvideo')
(全局变量),最后$wrapGetvideo
将包含您的最后一个元素引用。请尝试:
$(this).on('keyup', function(){
$(this).closest('.wrap-getvideo').find('.title').html('Testing');
});
而不是
$(this).on('keyup', function(){
$wrapGetvideo.find('.title').html('Testing');
});
<强> DEMO 强>
答案 1 :(得分:1)
您错过了var
语句,现在$wrapGetvideo
是全局的,并且在每次迭代时都会被覆盖,这就是为什么它只适用于最后一次
(function($){
$.fn.getVideo = function(){
return this.each(function() {
$(this).wrapAll('<div class="wrap-getvideo" />')
var $wrapGetvideo = $(this).closest('.wrap-getvideo');
$wrapGetvideo.append('<div class="title"></div>');
$(this).on('keyup', function(){
$wrapGetvideo.find('.title').html('Testing');
});
});
}
}(jQuery));