Javascript 为什么只有一个脚本值从表发回操作?
我会根据需要发布更多的代码,如果可以避免的话,我只是不想设置一个巨大的块。 基本上,在我的MVC3应用程序中,我有一个以表格格式显示的列表。 该表为每行包含一个复选框,以指示用户选择的行。 我试图在这个表的每一行上实现一个文件上传功能。 只有选中复选框,此功能才可用 upload函数使用valums Ajax uploader 这是使用的javascript函数,我现在在视图中有它Javascript 为什么只有一个脚本值从表发回操作?,javascript,jquery,html,ajax,asp.net-mvc-3,Javascript,Jquery,Html,Ajax,Asp.net Mvc 3,我会根据需要发布更多的代码,如果可以避免的话,我只是不想设置一个巨大的块。 基本上,在我的MVC3应用程序中,我有一个以表格格式显示的列表。 该表为每行包含一个复选框,以指示用户选择的行。 我试图在这个表的每一行上实现一个文件上传功能。 只有选中复选框,此功能才可用 upload函数使用valums Ajax uploader 这是使用的javascript函数,我现在在视图中有它 <script type="text/javascript"> $(document).ready
<script type="text/javascript">
$(document).ready(function () {
function handleCheckbox() {
if ($(this).find(':checkbox').is(':checked')) {
//$(this).find('#file-uploader-attachment').html($('#myHTML').html());
createUploader();
$(this).find('#file-uploader-attachment').removeClass("upload-placeholder-unchecked");
$(".qq-upload-button").css("margin-top", "-6px");
$(".qq-upload-button").css("margin-bottom", "-20px");
}
else {
$(this).find('#file-uploader-attachment').addClass("upload-placeholder-unchecked");
$(this).find('#file-uploader-attachment').html($('#myHTML2').html());
}
}
$('tr').each(function () {
handleCheckbox.apply(this); // We need to call the function initially using 'label' for this.
});
$('tr').on('click', handleCheckbox);
function createUploader() {
var uploader = new qq.FileUploader({
element: document.getElementById('file-uploader-attachment'),
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);
$('#resultMessage').addClass('greenText');
resultMessage.innerHTML = responseJson.msg;
$('#attachment').prepend('<hr/><p><a class="attachment-file" href="' + responseJson.fileId + '">' + responseJson.fileName + '</a>' +
'<a class="attachment-delete" href="' + responseJson.fileId + '">X</a></p>');
$('#no-attachments').remove();
}
});
}
});
json结果中的int-calibrationId参数始终是表中的最后一行id,无论是否选中
所以我确实有一些问题。
如果表中有多行,则未选择正确的行id。
上载btn仅显示在第一行,无论选中了哪行复选框。
并且不确定如何允许循环以确保每行都有一个上载btn,并且在上载时使用行Id
如果这是一个太宽泛的问题,我很抱歉,如果需要,我会添加更多的代码。只是一个提示:
$('tr')。每个(handleCheckbox)
就可以了,不需要只做handleCheckbox.apply(这个)的匿名函数代码>应用了该更改,谢谢。关于javascript/jquery.NP,仍在学习中。JS的语法类似于C/Java,因此可以让人联想到。但在内部,该语言的设计强烈倾向于函数式编程技术。您的问题可能是由于重复调用$中的createUploader
造成的。每个循环。上次调用createUploader
函数是在它处理最后一个tr时。我认为闭包可能会解决这个问题(虽然没有详细查看代码),你能扩展吗,你所说的代码“闭包”是什么意思?闭包。。。比如:var模块=(function(){var-closureVar=123;return{getVal:function(){return-closureVar;}};}())代码>。谷歌iLife,或者模块模式。这是一种将功能和数据封装、绑定在一起,并控制(或不)暴露于外部世界的方法
<script type="text/javascript">
var CAL_ID = '@Model.ElementAt(index).Id';
var CUST_NAME = '@Model.ElementAt(index).CustomerName';
</script>
public JsonResult AttachmentUpload(string qqfile, string customer, int calibrationId, IPrincipal user)