Jquery:奇怪的行为

时间:2011-03-14 17:52:13

标签: jquery javascript-events callback element this

$(document).ready(function()
{
    mais_telefones();
    upload_imagens();
});

function mais_telefones()
{
    mais_telefones.click(function(event)
    {
        var label = input = button = null,
            labels = $('.telefones'),
            tamanho = labels.length;

        event.preventDefault();

        if (tamanho < 3)
        {
            label = $('<label for="elemento' + tamanho +
                '" class="telefones elemento' +
                tamanho + '">Telefone</label>');

            input = $('<input id="elemento' + tamanho +
                '" class="elemento' +
                tamanho + '"type="text" name="telefones[]" />');

            button = $('<button class="elemento' + tamanho + '">X</button>');

            button.click(function(event)
            {
                event.preventDefault();
                $('.elemento' + tamanho).remove();
            });

            label.insertBefore($(this));
            input.insertBefore($(this));
            button.insertBefore($(this));
        }
    });
}

function upload_imagens()
{
    var imagem = $('#imagem');
    imagem.change(function(event)
    {
        alert($(this).files);
    });
}

在mais_telefones函数中,我可以使用$(this),追加元素(appendChild),insertBefore等。但是在第二个函数中我不能。 $(this).files返回undefined但this.files返回值......出了什么问题?

谢谢。

3 个答案:

答案 0 :(得分:0)

你必须将$(this)传递给各个函数

例如:

mais_telefones($('div'));

并在mais_telefones函数中:

function mais_telefones(sel){
     this = sel.get(0);
     ...
}

答案 1 :(得分:0)

jQuery: What's the difference between '$(this)' and 'this'?这可能对你有帮助。原谅双关语:P

答案 2 :(得分:0)

jquery总是返回一个jquery对象数组。你可能想要这个:

$(this)[0].files;