我有一个编写的简单JavaScript函数:
function fireGENURL(a){
try{
var selectedFiles = $('.fileCheck:checked');
if(selectedFiles.length < 1 ){
alert("Please select at least one file.");
return false;
}
var fileID = $(selectedFiles[0]).attr('fileid');
/* var $fileChecks = $('.fileCheck:checked');
$fileChecks.each(function() {
var file = $(this).attr('fileid');
alert(file+"has been selected");
});
var count = $fileChecks.length;*/
$('body').pWin("open", {
x: 260,
y: 47,
height: 450,
width: 881,
title: "Generate URL",
skinMode:'dialog',
iframe:true,
url: "file/url/genurl.jsp",
data: {
nodeID:fileID
},
offResize:true,
offMove:true,
onTitle:false,
offBottom:true
});
}catch(e)
{
alert(e);
}
}
当我选中任何文件上的复选框并触发GENURL按钮时,将调用上面的函数。下面是我的屏幕截图:
它调用genurl.jsp
来检索已选中复选框的fileID。
GENURL.JSP:
<%
//grabs the file id of each file
long nodeID = Long.parseLong(request.getParameter("nodeID"));
//need to input logic to populate data on each row
int count = 0;
List files = fileFacade.list_items(nodeID);
for (Iterator rstltr = files.iterator(); rstltr.hasNext();) {
Fmedia fv = (Fmedia) rstltr.next();
Node nd = nodeFacade.get(fv.getNodeid(), false);
// Fmedia fm = fileFacade.get_file(fv.getNodeid());
count++;
%>
<tbody>
<tr>
<td width="5%">
<!-- Checkbox -->
<input type="checkbox" name="name1" />
</td>
<td>
<!-- No -->
</td>
<td width="28%">
<!-- Filename -->
<%=nd.getNodedesc()%>
</td>
</tr>
</tbody>
<%}
%>
如您所见,nd.getNodedesc
将返回文件名并填充我的jsp页表。
无论如何,如果我勾选了一个框并填充表格,它可以工作,但是如果多次勾选并填充表格,我如何使其检索多个文件ID?
我知道这一行var fileID = $(selectedFiles[0]).attr('fileid');
仅检索一个文件ID,但我不知道如何获取多个文件以将其传递到JSP页面。
在我的JavaScript函数中,在注释掉的代码下,该代码段能够检索多个文件ID,但无法将值传递给data
。
function fireGENURL(a){
try{
var selectedFiles = $('.fileCheck:checked');
if(selectedFiles.length < 1 ){
alert("Please select at least one file.");
return false;
}
cutFiles = new Object();
var count = 0;
for(var file in selectedItems){
var fileID = file.substring(0);
// post each selected fileID
cutFiles['fileID' + count] = fileID;
count += 1;
alert(fileID +" has been selected");
}
// var fileID = $(selectedFiles[0]).attr('fileid');
/* var $fileChecks = $('.fileCheck:checked');
$fileChecks.each(function() {
var file = $(this).attr('fileid');
alert(file+"has been selected");
});
var count = $fileChecks.length;*/
$('body').pWin("open", {
x: 260,
y: 47,
height: 450,
width: 881,
title: "Generate URL",
skinMode:'dialog',
iframe:true,
url: "file/url/genurl.jsp",
data: {
nodeID:fileID
},
offResize:true,
offMove:true,
onTitle:false,
offBottom:true
});
}catch(e)
{
alert(e);
}
}
String[] split = request.getParameter("nodeID").split(",",0);
for(int i=0;i<split.length;i++){
long file=Long.parseLong(split[i]);
}
答案 0 :(得分:1)
您只能使用我知道的单个数据变量通过JS中的HTML GET传递数组的唯一方法是对其进行字符串化:
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->softDeletes();
$table->string('code',45);
});
Schema::create('materials', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->softDeletes();
$table->string('code',45);
});
Schema::create('product_material', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->softDeletes();
$table->integer('product_id');
$table->integer('material_id');
});
这将发送一个字符串,可以使用以下命令将其解析为数组:
var selectedFiles = [];
$('.fileCheck:checked').each(function() { selectedFiles.push($(this).attr('fileid')); });
var stringArray = JSON.stringify(selectedFiles);
$('body').pWin("open", {
x: 260,
y: 47,
height: 450,
width: 881,
title: "Generate URL",
skinMode:'dialog',
iframe:true,
url: "file/url/genurl.jsp",
data: {
nodeID:stringArray
},
offResize:true,
offMove:true,
onTitle:false,
offBottom:true
});
请参见Fiddle示例,它产生什么输出。
https://jsfiddle.net/h3Legzt6/1/
编辑:
有一些限制,例如: What is the maximum length of a URL in different browsers?
其他方法是使用本地存储:
JSON.parse(request.getParameter("nodeID"));
和
localStorage.setItem('IDs', JSON.stringify(selectedFiles));
根据浏览器的默认设置,这也有局限性,但仅限于更多的空间。不幸的是,由于用户可以配置localStorage可以占用多少空间,因此无法保证该空间。 What is the max size of localStorage values?
此外,要小心,因为多个选项卡可能会干扰此存储,并在存储名称中包含一些呼叫标识,每个选项卡名称都唯一是一个好主意,并向JSP提供该唯一ID,以便它能够找到它。
EDIT2:
要在您的代码中实现它,应该这样做:
JSON.parse(localStorage.getItem('IDs'));
编辑3:
根据注释,还可以生成由定界数字组成的字符串(例如:123,234),并将其在JSP中拆分,然后将其转换为Long in loop。
编辑4:
这只是一个尝试,语法可能是错误的,我认为您已经做到了。您将其拆分,循环通过并转换为Long,此long可以与其余代码一起使用:
function fireGENURL(a){
try{
var selectedFiles = $('.fileCheck:checked');
if(selectedFiles.length < 1 ){
alert("Please select at least one file.");
return false;
}
var filesList = [];
var $fileChecks = $('.fileCheck:checked');
$fileChecks.each(function() {
filesList.push($(this).attr('fileid'));
});
var count = $fileChecks.length;
var stringArray = JSON.stringify(filesList);
$('body').pWin("open", {
x: 260,
y: 47,
height: 450,
width: 881,
title: "Generate URL",
skinMode:'dialog',
iframe:true,
url: "file/url/genurl.jsp",
data: {
nodeID:stringArray
},
offResize:true,
offMove:true,
onTitle:false,
offBottom:true
});
}catch(e)
{
alert(e);
}
}