我有一个html页面,其中列出了文件夹中的所有文件名和常用文件操作作为它们旁边的锚标签。当用户点击文件操作时说删除,用户会被提示他是否确定他想要删除所选文件。它几乎完美无缺,但是,当遇到空格和特殊字符ex:(My Track [Ezee's] .mp3)的文件名时,它会失败。这里有一个解决方法。任何帮助或指针非常感谢正确的方向。谢谢
HTML
<tr class="filetable_entry_alt">
<td>
<input type="checkbox" name="sample10 with spaces (ezee's).jpg" value="file">
</td>
<td>
<a href="/mnt/sdcard/DCIM/sample10 with spaces (ezee's).jpg" title="sample10 with spaces (ezee's).jpg" class="thumb" rel="cb">
<img src="/thumbnail.wft?image=/mnt/sdcard/DCIM/sample10 with spaces (ezee's).jpg&kind=micro&lm=1308828676000" alt="">
<b>
<img src="/thumbnail.wft?image=/mnt/sdcard/DCIM/sample10 with spaces (ezee's).jpg&kind=micro&lm=1308828676000" alt="" style="width:150px; height:150px;">
</b>
</a>
</td>
<td>
<a href="/mnt/sdcard/DCIM/sample10 with spaces (ezee's).jpg" title="sample10 with spaces (ezee's).jpg">
sample10 with spaces (ezee's).jpg
</a>
</td>
<td>
06/23/11 12:31 PM
</td>
<td>
1.76 MB
</td>
<td>
<a href="#" onclick="return confirmDel('/mnt/sdcard/DCIM/sample10 with spaces (ezee's).jpg', '/mnt/sdcard/DCIM/?');">
delete
</a> |
<a href="#" onclick="return confirmRen('/mnt/sdcard/DCIM/','sample10 with spaces (ezee's).jpg','/mnt/sdcard/DCIM/?');">
rename
</a>|
<a href="#" onclick="return confirmCopy('/mnt/sdcard/DCIM/','sample10 with spaces (ezee's).jpg', '/mnt/sdcard/DCIM/?');">
copy
</a>
</td>
JS代码
var selectedFile = 'noFile';
var selectedFile2 = 'noFile';
function confirmDel(t, p) {
var confirmDeltxt = 'Are you sure you want to delete ' + t + '?';
selectedFile = decodeURIComponent(t);
selectedFile2 = decodeURIComponent(p);
jQuery.prompt(confirmDeltxt, {
callback: confirmDelcallback,
buttons: {
Delete: 'ok',
Cancel: 'cancel'
}
});
return false;
}
function confirmDelcallback(v, m, f) {
if (v != undefined && v == 'ok') {
var form = document.forms.filelist;
form.action.value = 'delete';
form.data_file.value = selectedFile2 + "/" + selectedFile;
form.submit();
}
}
function confirmRen(p, f, cp) {
selectedFile = decodeURIComponent(p);
selectedFile2 = decodeURIComponent(f);
var confirmRentxt = 'Enter new file name:<br /><br /><input type="text" id="newPath" name="newPath" value="' + f + '" />';
jQuery.prompt(confirmRentxt, {
submit: confirmRensubmit,
callback: confirmRencallback,
buttons: {
Rename: 'ok',
Cancel: 'cancel'
}
});
return false;
}
function confirmRensubmit(v, m, f) {
an = m.children('#newPath');
if (v == 'ok') {
if (f.newPath == "") {
an.css("border", "solid #ff0000 1px");
return false;
}
}
return true;
}
答案 0 :(得分:2)
输出HTML时,必须以这样的行转义'。生成的HTML应如下所示:
onclick="return confirmCopy('/mnt/sdcard/DCIM/',
'sample10 with spaces (ezee\'s).jpg',
'/mnt/sdcard/DCIM/?');"
(新行只是为了更好的外观)
你将如何做到这一点取决于你的服务器端语言,但替换'with'应该就足够了。
答案 1 :(得分:0)
首先,我不确定你为什么在网页中使用/ mnt / sdcard的东西,但如果你的编辑器有语法高亮功能,你会立即看到你的代码是一团糟。 这是一个例子:
<a href="#" onclick="return confirmDel('/mnt/sdcard/DCIM/sample10 with spaces (ezee's).jpg', '/mnt/sdcard/DCIM/?');">
delete
</a>
我甚至不确定那些是有效的文件路径。除此之外,你需要做的是逃避角色。例如,
onclick="return confirmDel('/etc/ezze\'s.jpg');"
我不确定你的jquery代码,但它看起来也很混乱,如果你检查它会更好。