Javascript 如何使用jquery将html和css应用于表中的选定行?

Javascript 如何使用jquery将html和css应用于表中的选定行?,javascript,jquery,html,asp.net-mvc-3,Javascript,Jquery,Html,Asp.net Mvc 3,在我的MVC3应用程序中,我的问题是,我有一个表,其中的行数是由返回到视图的记录数生成的。 如果记录不包含文件,则这些行具有复选框和上载btn功能。 其想法是,如果没有与记录关联的文件,“无证书”将显示在证书列下。 只有选中此复选框,此单元格才会显示“上载文件”btn。 单击此btn并打开窗口以选择文件后 选择文件后,将显示一条弹出消息,通知用户文件已成功上载。 但是,该选定行的Cert下的单元格现在将为空。只有页面刷新时,才会显示文件名 我确实尝试添加一个带有关联类的div来显示“Upload

在我的MVC3应用程序中,我的问题是,我有一个表,其中的行数是由返回到视图的记录数生成的。 如果记录不包含文件,则这些行具有复选框和上载btn功能。 其想法是,如果没有与记录关联的文件,“无证书”将显示在证书列下。 只有选中此复选框,此单元格才会显示“上载文件”btn。 单击此btn并打开窗口以选择文件后 选择文件后,将显示一条弹出消息,通知用户文件已成功上载。 但是,该选定行的Cert下的单元格现在将为空。只有页面刷新时,才会显示文件名

我确实尝试添加一个带有关联类的div来显示“Uploaded”,第一个成功了。 但是,当我在另一个选中的行上重复该过程时,“upload”div将再次应用于第一行,而我刚刚选中的行中的单元格将保留为空。 我相信这是因为代码使用了td,在下面的onComplete函数中使用了第一个ID“attBtn”

                      onComplete: function (id, fileName, responseJson) {
                    var resultMessage = document.getElementById('resultMessage');
                    alert(responseJson.msg);
                    $('.qq-uploader').remove();
                    $('#attBtn').prepend('<div class="uploadedTag"><p>Uploaded</p></div>');
onComplete:function(id、文件名、responseJson){
var resultMessage=document.getElementById('resultMessage');
警报(responseJson.msg);
$('.qq uploader').remove();
$(“#attBtn”)。前置(“已上载”

”;
表中有关上载功能的部分:

      @if (Model.ElementAt(index).CertName != null)
             {
                 <td>@Html.DisplayFor(m => Model.ElementAt(index).CertName)</td>
             }
             else
             {                    
                <td id ="attBtn" class="file-uploader-attachment-Class"></td>
             }
@if(Model.ElementAt(index.CertName!=null)
{
@DisplayFor(m=>Model.ElementAt(index.CertName)
}
其他的
{                    
}
视图中使用的脚本:

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

    function handleCheckbox() {
        if ($(this).find(':checkbox').is(':checked')) {
            createUploader($(this));

            $(this).find('.file-uploader-attachment-Class').removeClass("upload-placeholder-unchecked");
        }
        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(container) {

        var elements = container.find('.file-uploader-attachment-Class');

        var CAL_ID = container.find(':checkbox').val()

        Array.prototype.filter.call(elements, function (element) {

            var uploader = new qq.FileUploader({
                element: element,
                sizeLimit: 2147483647, // max size
                action: '/CalibrationViewer/AttachmentUpload',
                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);
                    $('.qq-uploader').remove();
                    $('#attBtn').prepend('<div class="uploadedTag"><p>Uploaded</p></div>');

                }

            });

        });
    }
});

$(文档).ready(函数(){
函数handleCheckbox(){
if($(this).find(':checkbox').is(':checked')){
createUploader($(this));
$(this).find('.file uploader attachment Class').removeClass(“未选中上载占位符”);
}
否则{
$(this).find('.file uploader attachment Class').addClass(“未选中上载占位符”);
$(this.find('.file uploader attachment Class').html($('#myHTML2').html());
}
}
$('tr')。每个(handleCheckbox);
$('tr')。在('click',handleCheckbox)上;
函数createUploader(容器){
var elements=container.find('.file uploader attachment Class');
var CAL_ID=container.find(':checkbox').val()
Array.prototype.filter.call(元素,函数(元素){
var uploader=new qq.FileUploader({
元素:元素,
sizeLimit:2147483647,//最大大小
操作:'/CalibrationViewer/AttachmentUpload',
允许的扩展:['xls','xlsx','pdf','doc','docx','csv','txt','rtf','zip','zipx','7z'],
参数:{
客户:客户名称,
校准ID:校准ID
},
多重:假,
调试:错误,
onComplete:函数(id、文件名、responseJson){
var resultMessage=document.getElementById('resultMessage');
警报(responseJson.msg);
$('.qq uploader').remove();
$(“#attBtn”)。前置(“已上载”

”; } }); }); } });

如何识别当前正在使用的行?
如果我能得到刚刚插入到单元格中的文件名的名称,而不是“上载”的名称,那就太好了。

我不想试图找出您的特定元素类,只想指出一种通用方法,这是在重复的html块中隔离实例的一种非常常见的模式

因为您使用的是表,所以行将是


我将尝试在代码中合并,基于上述内容,我在onComplete函数下添加了var$row到createUpLoader和$row.find,但没有乐趣,我将继续,感谢您的建议。我通过使用以下-elements.closest('.file uploader attachment Class')。prepend('uploader

')取得了一些进展但是同样的方法不允许我删除qq上传器类,所以现在我有“上传”和“上传文件”btn在同一个单元格中??我打算发布我的答案想法,但我认为它不够具体。我看不出您是如何处理上载按钮单击事件的。但在该单击事件中,您知道自己所在的行,因为您知道单击了什么按钮。您可以向该行(或单元格,无论什么)添加类在按钮中,单击“偶数”以用作onComplete事件中的选择器。完成后删除该类。
$('.someButtonClass').click(function(){

   /* "this" is the instance of the elements 
       represented by selector that event triggered on
    */
    var $row = $(this).closest('tr'); /* isolate row instance*/

    /* now look within row instance to manipulate descendant elements  */

    $row.find('.someOtherClass').doSomething();
});