【问题标题】:Can I generate IDs for table cells based on number of rows being returned to view?我可以根据返回查看的行数为表格单元格生成 ID 吗?
【发布时间】:2015-02-13 20:47:30
【问题描述】:

长话短说。我正在尝试在我的 C# MVC 3 应用程序中实现文件上传功能。 我有一个 fileuploader.js 文件,我认为该文件取自 http://github.com/valums/file-uploader(这原本不是我的应用程序)。 我想让文件上传功能可用于在我的视图中到达表上的行,行数将基于从数据库接收到的条目数。 我目前遇到的问题是 Upload btn 只出现在第一行。 我确定这是因为此功能从查找 id 为“file-uploader-attachment”的 div 开始 我尝试将 javascript 更改为 document.getElementsByClass 并给 div 一个类而不是一个 ID,但它没有成功。 因此,我需要即时生成和分配 ID,或者以其他方式为每行中的元素分配 ID,并允许 javascript 找到它们。 我会根据需要添加更多代码,但我不想用代码填充页面。 如果有人能指出我正确的方向或知道类似的解决方案。 同样,我需要一个文件上传 btn/feature 用于大小可变的表中的每一行。

表格中的单元格

  <td id="file-uploader-attachment"></td>

相关 javascript 代码中 createUploader() 函数的开始

     var uploader = new qq.FileUploader({
             element: document.getElementById('file-uploader-attachment'),

脚本在视图中:

 <script type="text/javascript">
$(document).ready(function () {

    // requests attachments from server, clears existing attachments and
    // replaces with most up to date attachments
    function LoadAttachments() {
        $('.loading').show();
        $.post('/CalibrationViewer/GetAttachments', { calibrationId: CAL_ID }, function (data) {
            $('#attachment').empty();
            $('#attachment').append(data);
            $('.loading').hide();
        });
    }

    function handleCheckbox() {
        if ($(this).find(':checkbox').is(':checked')) {
            //$(this).find('#file-uploader-attachment').html($('#myHTML').html());
            createUploader();
            $(this).find('file-uploader-attachment-Class').removeClass("upload-placeholder-unchecked");
            $(".qq-upload-button").css("margin-top", "-6px");
            $(".qq-upload-button").css("margin-bottom", "-20px");

        }
        else {
            $(this).find('.file-uploader-attachment-Class').addClass("upload-placeholder-unchecked");
            $(this).find('.file-uploader-attachment-Class').html($('#myHTML2').html());
        }
    }

    $('tr').each(handleCheckbox);
    $('tr').on('click', handleCheckbox);

    function createUploader() {

        $(".file-uploader-attachment-Class").each(function (element) {
            var uploader = new qq.FileUploader({
                element: element,
                sizeLimit: 2147483647, // max size
                action: '/Controller/Action',
                allowedExtensions: ['xls', 'xlsx', 'pdf', 'doc', 'docx', 'csv', 'txt', 'rtf', 'zip', 'zipx', '7z'],
                params: {
                    customer: CUST_NAME,
                    calibrationId: CAL_ID
                },
                multiple: false,
                debug: false,

                onComplete: function (id, fileName, responseJson) {
                    var resultMessage = document.getElementById('resultMessage');
                    alert(responseJson.msg);
                    $('#resultMessage').addClass('greenText');
                    resultMessage.innerHTML = responseJson.msg;

                    $('#attachment').prepend('<p><a class="attachment-file" href="' + responseJson.fileId + '">' + responseJson.fileName + '</a>');
                    $('#removeAttachment').prepend('<p><a class="attachment-delete" href="' + responseJson.fileId + '">X</a></p>');

                    $('#no-attachments').remove();
                }

            });

        });
    }
});

【问题讨论】:

  • 那么问题是什么。您需要唯一标识每个元素吗?因此,如果您使用的是 ID,那么它们需要是唯一的。我不清楚挂断在哪里。
  • 如果我为表格单元格分配 ID,但我假设该单元格重复,这就是为什么我的上传 btn/功能只会启动一次。因为我可以拥有 5 个具有相同 ID 的单元格 ....follow ?
  • 是的,我遵循这一点。所以他们必须被赋予唯一的ID。页面上只有一个元素应该有任何给定的 ID。所以我不清楚你在哪里卡住了。

标签: javascript c# jquery asp.net-mvc-3 file-upload


【解决方案1】:

原因是您的 html 页面中只能有一个 id(文件上传器附件)(它们应该是唯一的)。如果它们不是唯一的,则采用第一个(如果这是按照标准或常识,我不知道)。

你想要达到的效果是这样的:

<td class="file-uploader-attachment"></td>

 var elements = document.getElementsByClassName('file-uploader-attachment');
 Array.prototype.filter.call(elements, function(element){
 var uploader = new qq.FileUploader({
         element: element, ...
 });

使用 jquery 甚至更简单(如果已经在使用):

$(".file-uploader-attachment).each(function (element) {
   var uploader = new qq.FileUploader({
         element: element, ...
});

【讨论】:

  • 感谢绝对的进步,我将在这里碰碰运气,并添加一些代码问题,因为我仍然没有达到 CreateUploader 函数中所需的操作。感谢您花时间查看。
猜你喜欢
  • 2022-01-06
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2011-03-29
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多