gpt4 book ai didi

jquery - 自定义 jQuery 插件的问题

转载 作者:行者123 更新时间:2023-12-01 04:22:30 25 4
gpt4 key购买 nike

我一直在努力使用自定义 jQuery 插件。整个要点如下:单击触发器,就会出现一个工具箱。在该特定工具箱中,您有一个输入字段,您可以在其中粘贴并提交 Youtube 或 Vimeo URL。根据该 URL,我将更改页面上当前的视频。

我遇到的问题是,当我单击触发器时,我得到的不是一个,而是三个工具箱(如果我在页面上有 3 个视频并且我单击第一个),两个工具箱(如果我在页面上有 3 个视频)页面,我单击第二个),如果我单击最后一个(相同条件),则单击一个 - 我很确定您知道这是怎么回事。

代码如下:

(function($) {

$.fn.videowidget = function() {
return this.each(function(){
// declare variables
var parent = $(this);
var thisPos = $(this).offset();

var widgetHtml = jQuery('<div class="tool-video"><ul><li><a href="#tool-video1">Video</a></li></ul>' +
'<div id="tool-video1">' +
'<form id="tool-video-form" action="#" method="post">' +
'<label for="tool-video-url">Please enter the URL of your video ( only Youtube or Vimeo accepted )</label>' +
'<input type="text" id="tool-video-url" name="tool-video-url" value="" class="marginFive">' +
'<a href="#submitVideo" class="videowidget-submit btn btn-success">Submit</a>' +
'<div class="tool-video-error"></div>' +
'</form>' +
'</div>' +
'<a href="#close" class="closeImageBox">Close</a>' +
'<a href="#drag" class="dragHandler" title="Drag me !!!">Draggable</a>' +
'</div>');

// check if the containing div has the class 'w-video'
if($(this).hasClass('w-video')) {
$(this).append('<a href="#video" class="videoPlaceholder">Video placeholder</a>');
$('.videoPlaceholder').bind('click', function() {

// insert the video widget and apply the required settings ( positioning, drag, tabs )
widgetHtml.appendTo('body').css(thisPos).fadeIn().draggable({handle: 'a.dragHandler', cursor: 'move'}).tabs();
$('.videowidget-submit').click(function(){
// value of the submitted url
var url = $(this).prev('input').val();
// regex to match provider
var provider = url.match(/(?:http:\/\/)?(:?www.)?(\w*)/)[2], id;
if(provider == "youtube") {
id = url.match(/(?:http:\/\/)?(?:www.)?(\w*).com\/.*v=(\w*)/)[2];
// remove the curent iframe and replace it with the one bellow using the ID of the submitted URL
var youtubeTemplate = '<iframe width="460" height="259" src="http://www.youtube.com/embed/'+ id +'?wmode=opaque" frameborder="0" allowfullscreen></iframe>';
parent.find('iframe').remove();
parent.append(youtubeTemplate);
$('.tool-video-error, .tool-video').fadeOut();
return false;
} else if (provider == "vimeo") {
id = url.match(/(?:http:\/\/)?(?:www.)?(\w*).com\/(\d*)/)[2];
// remove the curent iframe and replace it with the one bellow using the ID of the submitted URL
var vimeoTemplate = '<iframe src="http://player.vimeo.com/video/'+ id +'?wmode=opaque" width="460" height="259" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
parent.find('iframe').remove();
parent.append(vimeoTemplate);
$('.tool-video-error, .tool-video').fadeOut();
return false;
} else if (provider == "youtu") {
id = url.match(/(?:http:\/\/)?(?:www.)?(\w*).be\/*(\w*)/)[2];
// remove the curent iframe and replace it with the one bellow using the ID of the submitted URL
var youtubeTemplate = '<iframe width="460" height="259" src="http://www.youtube.com/embed/'+ id +'?wmode=opaque" frameborder="0" allowfullscreen></iframe>';
parent.find('iframe').remove();
parent.append(youtubeTemplate);
$('.tool-video-error, .tool-video').fadeOut();
return false;
} else {
// throw error if the submitted URL doesn't match youtube or vimeo
$('.tool-video-error').html('Error: The URL you submitted doesn\'t appear to be valid ').fadeIn();
}
return false;
});
// close the toolbox
$('.closeImageBox').click(function(){
$(this).parent().fadeOut();
return false;
});
return false;
});
} else {
// do nothing
}
});
};
})(jQuery);

最佳答案

问题是,当您按类选择进行绑定(bind)时,没有为选择器提供上下文。

$('.videowidget-submit').click(...)

因此,当您应用插件的页面中有多个元素时,它会绑定(bind)到具有“videowidget-submit”类的所有元素,而不仅仅是当前实例。

向以下选择器添加上下文,如下所示(我可能忘记了一些,请检查代码)。

对于<a>打开弹出窗口的链接:

$(this).find('.videoPlaceholder').bind('click', ...)

对于弹出窗口内的元素:

widgetHtml.find('.videowidget-submit').click(...)

widgetHtml.find('.tool-video-error, .tool-video').fadeOut()

widgetHtml.find('.closeImageBox').click(...)

<强> DEMO

关于jquery - 自定义 jQuery 插件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com