为什么我的jQuery扩展功能“静态”?

时间:2013-04-26 14:51:38

标签: javascript jquery

我制作了一个自定义的jQuery扩展来处理要上传的文件。

我的剥离版本:http://jsfiddle.net/6huV6/

我的完整版:http://jsfiddle.net/LQrJm/

我的问题是buildBondye被调用了2次,但我的扩展名是2 x 2 droppers and buttons ..

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

您得到四个,因为对于您的匹配元素集中的每个元素,您调用buildBondye函数,后者又调用addButtonaddDropper函数。这些函数使用$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);
}

看看this updated jsFiddle