从javascript调用时触发文件输入的更改事件(即头痛)

时间:2011-03-15 17:24:54

标签: jquery internet-explorer file-upload onchange

我不知道我做错了什么。我已经找到修复/黑客,但它们似乎都没有工作。 尝试使用单个按钮/图像(某物)而不是输入文件控件。到目前为止它除了在Internet Explorer中工作。即出现“选择文件”对话框,让您选择一个文件,随附的文本框将被填充,但更改事件不会触发。 我已经尝试过焦点,模糊,生活,onpropertychange,更改,onchange ......但它们只是不起作用。有什么帮助吗?

jQuery的:

      $(function() {
            var a = $('a.#LinkUpload');
            var f = $('input.#file');
            a.click(function() {
                f.click();
            });
            f.change(function() {
                alert('changed!');
            });
        });

HTML:

    <body>
    <form action="">
        <div>
            <a id="LinkUpload">Click Me!</a>
            <input type="file" id="file" name="file" />
        </div>
    </form>
</body>

4 个答案:

答案 0 :(得分:0)

@Pointy说道。如果它是一个ID,则不需要指定标记名称,所以只需执行以下操作:

var $a = $('#LinkUpload'),
    $b = $('#file');

在缓存jQuery对象时,在变量名中添加$(美元符号)也是一种很好的做法,这样您就知道变量实际上是一个jQuery对象。

答案 1 :(得分:0)

知道了! (我想)。

$(function() {
    var a = $('#LinkUpload');
    var f = $('#file');
    a.click(function() {
        f.click();
        setTimeout(function() {
            f.val(f.val());
        }, 1);
    });
    if ($.browser.msie && $.browser.version < 9) {
        f.bind('propertychange', function() {
            alert('changed');
        });
    } else {
        f.change(function() {
            alert('changed!');
        });
    }
});

似乎工作。

答案 2 :(得分:0)

这是Oppdal解决方案文件部分的一个稍微简洁的实现:

f.bind(($j.browser.msie && $j.browser.version < 9) ? 'propertychange' : 'change',
       function(){ 
           alert('changed!');
       });

答案 3 :(得分:0)

在新的jQuery版本中已经改变了。我从1.4.4更新到1.6.2,没有解决方法,它工作正常。