【问题标题】:Get filenames of uploaded file into dynamically created textbox using jquery使用jquery将上传文件的文件名获取到动态创建的文本框中
【发布时间】:2014-08-17 04:02:04
【问题描述】:

我有一个使用 (html/jquery) 的多图像上传功能,我将文件名放入每个上传按钮旁边的文本框中。

当页面加载时文件输入元素已经存在于页面中时,它可以正常工作。

演示:http://jsfiddle.net/squidraj/Ldcp7hoc/6/

但现在有一个转折点。我有一个添加按钮,每次点击都会创建动态文件上传按钮和输入框。您也可以删除它们。

在这种情况下,我使用与上述相同的代码,但更改功能不起作用。

动态的html代码--

<input type="button" data-role="image" data-id="32" id="addButton" 
value="+" class="tiny button radius">
<div id="TextBoxesGroup"></div>

JSFiddle : http://jsfiddle.net/squidraj/vsbk8xts/

【问题讨论】:

  • 我试过你的小提琴,但文件名没有进入文本框。是的,可能是事件绑定的问题,但不确定我应该使用哪个。
  • 我尝试使用 .live 代替 .on 但无法正常工作。
  • .live() 早已被弃用。你应该只使用.on()。在您的代码中,您使用var 重置变量counter

标签: jquery html file-upload


【解决方案1】:

将事件处理程序附加到动态添加的元素时遇到问题。

另外,您在代码中使用了var 来重置变量counter

检查代码中的 cmets 以发现已更改的内容:

var counter = 1;

// Using delegation.
$(document).on("click", "#addButton", function () {
    var datacounter = $('#TextBoxesGroup .textboxdiv_new:last-child').attr('data-id');

    if (typeof (datacounter) != 'undefined') {
        counter = parseInt(datacounter, 10) + 1;
    } else {
        counter = 1;
    }

    var quid = $(this).attr("data-id");
    var datarole = $(this).attr("data-role");

    if (counter > 10) {
        alert("Only 10 textboxes allowed");

        return false;
    }

    var newTextBoxDiv = $(document.createElement('div')).attr({
        'id': 'TextBoxDiv' + counter,
        'data-id': counter,
        'class': 'textboxdiv_new'
    });

    if (datarole == "image") {
        newTextBoxDiv.after().html('<div class="row"><div class="large-3 columns left button-mar-top-btm"><label class="tiny button radius multipleimg"><input type="file" name="ques_' + quid + '[]' + '" id="ques_' + quid + '[]' + '" value="" class="imgupload" data-id=' + counter + '>Upload Photo</label> </div><div class="large-7 left columns button-mar-top-btm"><input class="file-upload-input" type="text" id="filename' + counter + '"></div><div class="large-2 left columns button-mar-top-btm"><a href="#" class="button radius tiny alert removeField" >&#215;</a></div></div>');
    } else {
        newTextBoxDiv.after('').html('<div class="row"><div class="large-10 columns"><input type="text" name="ques_' + quid + '[]' +
            '" id="ques_' + quid + '[]' + '" value="" ></div><div class="large-2 columns left padding-top"><a href="#" class="button radius tiny alert removeField" >&#215;</a></div>');
    }

    newTextBoxDiv.appendTo("#TextBoxesGroup");
    counter++;
});

// Using delegation.
$(document).on("click", "a.removeField", function (event) {
    event.preventDefault();

    var newTextBoxDiv = $(document.createElement('div'));
    var previd = $("input#addButton").attr("data-id");
    var div = $(this).parent().parent().parent().remove();
    var datacounter = $('#TextBoxesGroup .textboxdiv_new:last-child').attr('data-id');

    if (typeof datacounter != 'undefined') {
        // Removed the var because you don't want to reset counter.
        counter = parseInt(datacounter, 10) + 1;
    } else {
        counter--;
    }

    if (counter <= 1) {
        newTextBoxDiv.after().html('<input type="hidden" name="ques_' + previd + '" id="ques_' + previd + '" value="" >');
        newTextBoxDiv.appendTo("#TextBoxesGroup");
    }
});

// Using delegation.
$(document).on('change', '.imgupload', function (e) {
    var imgid = $(this).attr("id");
    var filenames = [].slice.call(e.target.files).map(function (f) {
        alert(f.name);

        return f.name;
    });

    $('#filename' + $(this).attr("data-id")).val(filenames);
});

Demo

【讨论】:

  • 太棒了!非常感谢您节省了晚上的休息时间。也感谢您的评论。
猜你喜欢
  • 2014-10-10
  • 2012-12-23
  • 2011-11-14
  • 2014-01-21
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多