【问题标题】:Jquery: strange behaviourJquery:奇怪的行为
【发布时间】:2011-03-14 17:52:12
【问题描述】:
$(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 返回值...怎么了?

【问题讨论】:

  • mais_telefones 函数中有什么?
  • 什么是$(this).files

标签: jquery callback this element jquery-events


【解决方案1】:

您必须将 $(this) 的内容传递给各个函数

例如:

mais_telefones($('div'));

在 mais_telefones 函数中:

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

【讨论】:

  • 但为什么它在第一个函数中起作用而不在第二个函数中起作用?谢谢。
  • $(this).files 应该做什么?我从来没有听说过这个功能
  • 它不是 jquery 函数。他正在尝试访问包含 type="file" 输入的“文件”集合的本机 dom 元素
【解决方案2】:

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

$(this)[0].files;

【讨论】:

  • 你知道为什么吗?当我说“这个”时,我想要当前对象。在我的第一个函数中,我在 insertBefore 中使用它,请看一下。谢谢。
  • 这是因为 $(this) 返回一个不包含“文件”集合的 jquery 对象。你想要原生的 javascript 元素,你必须把 $(this) 当作一个数组。 .insertBefore() 之所以有效,是因为它是一个 jquery 函数
【解决方案3】:

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

【讨论】:

  • 但是 imagem 是一个文件输入。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 2018-07-11
  • 2014-12-25
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多