我制作了一个自定义的jQuery扩展来处理要上传的文件。
我的剥离版本:http://jsfiddle.net/6huV6/
我的完整版:http://jsfiddle.net/LQrJm/
我的问题是buildBondye
被调用了2次,但我的扩展名是2 x 2 droppers and buttons ..
我该如何解决这个问题?
答案 0 :(得分:6)
您得到四个,因为对于您的匹配元素集中的每个元素,您调用buildBondye
函数,后者又调用addButton
和addDropper
函数。这些函数使用$this
,它是整个匹配元素集(所以它们都是),而不仅仅是.each()
迭代的元素。
您可以通过将对单个元素的引用传递给这两个函数来解决此问题,并使用它来代替:
var buildBondye = function () {
// inside buildBondye this refers to the specific element for the iteration of .each()
// different to the this inside the $.fn.bondye function
addButton(this);
addDropper(this);
}
var addDropper = function (element) {
$dropper = $('<input type="text" readonly />');
$dropper.val('drop here');
$(element).after($dropper);
}
var addButton = function (element) {
$button = $('<input type="button" />');
$button.val('browse');
$button.bind('click', function () {
$(element).trigger('click');
});
$(element).after($button);
}