我发现一些可以上传文件的Javascript效果很好。但是,当我在asp.net页面上添加搜索时,它会触发回发以清除文件。这是不断触发$(document).on(“ click”,“ #attachedfiles tr”,function()的行 我已经尝试过“加载”,“就绪”,并且.back总是会触发javascript。 应该使用什么来确保仅在初始页面加载时触发javascript?这是完整的脚本。
$(function () {
var fileExt = "";
var fileDesc = "";
fileExt = "*.jpg;*.jpeg;*.gif;";
fileDesc = "Allowed Files ";
fileExt += "*.mp3;*.wav";
fileExt += "*.flv;*.mpg;*.mp4;*.avi";
fileExt += "*.html,*.htm,*.doc;*.docx;*.pdf;*.rtf;*.txt,*.csv,*.xsl;*.xslx";
$("[id*=FileUpload1]").uploadify({
'swf': 'scripts/uploadify.swf',
'buttonText': 'Attach Files',
'uploader': 'uploadVB.ashx?key=<%=Key %>',
'method': 'post',
'fileSizeLimit': '12MB',
'fileTypeDesc': fileDesc,
'fileTypeExts': fileExt,
'multi': true,
'auto': true,
'onSelect': function (event, ID) {
$('#btnSendx0').prop('disabled', true);
$("#attachedfiles tr").each(function () {
if ($("td", this).eq(0).html() == event.name) {
alert(event.name + " already uploaded.");
$('#btnSendx0').prop('disabled', false);
$("#FileUpload1").uploadify('cancel');
return;
}
});
},
'onUploadComplete': function (event, ID, file, response, data) {
$('#btnSendx0').prop('disabled', false);
$("#attachedfiles").append("<tr class='someclass'><td>" + event.name + "</td><td><a href='javascript:;' >[x]</a></td></tr>");
}
});
});
$(document).on("click", "#attachedfiles tr", function () {
console.log($(this).attr('someclass'));
var row = $(this).closest("tr");
var fileName = $(this).closest('tr').find('td').eq(0).html();
var href = $(this).find("a").attr("href");
$.ajax({
type: "POST",
url: "sendEmails.aspx/RemoveFile",
data: '{fileName: "' + fileName + '", key: "<%=Key %>" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () { },
failure: function (response) {
alert(response.d);
}
});
row.remove();
});
答案 0 :(得分:0)
我认为您遗漏了一点:每次回发时,都会重新加载HTML页面。 HTML是无状态的,但是使用POST和ViewState,ASP.NET可以模拟全状态的HTML。 这可能是一团糟:您认为页面未完全加载,而是页面已加载,并且每次使用runat =“ server”元素(updatepanel和其他对ajax友好的控件除外)完成请求时,数据都会重新填充。与请求之前的数据相同。
因此,要点是HTML(当浏览器解释HTML时将执行javascript),无法“直接”知道是第一次还是x时间加载(理论上可以通过引用者获得,但是正在开发中)这个问题的正确逻辑……与PostBack或其他ASP.NET机制无关)。
要回答您的问题,请尝试仅在非回发时才呈现脚本,在页面中创建受保护的字符串loadInitialScript()方法,如果不是回发,则以字符串形式返回脚本,否则返回string.Empty。然后在您的脚本标签中:
<script type="text/javascript>
<%=loadInitialScript()%>
</script>
因此,如果是回发,则loadInitialScript方法将返回一个空字符串,否则它将返回javascript函数(我建议使用$(document).on(“ ready”))并执行。