1.关于如何用脚本修改fileupload控件值的问题,
开发环境vs2005,在上传文件时,需要一个取消的按钮来清空type=file的value,而且这个页面上有多个file控件
这个比较麻烦因为file的值本身是不允许用脚本修改的(安全角度考虑)
方法1).使用脚本把这个file的input移动到一个form中,然后调用reset,如果有多个这样的input当然还要再移出来.这个方法我不会采用,因为对.net开发者
来讲习惯了一个页面就一个form所有控件都在其中.
方法2).这个方法有点投机,就是在脚本中调用
var fileup = document.getElementById(fileid);
fileup.outerHTML = fileup.outerHTML; 这个ie对脚本处理以及展现机制有关
方法3).这个主要是在解决ff上的问题时考虑到的,其实就是重新生成了一个id相同的file,这里要注意 name一定也要赋值,否则是很难提交给服务器接受的
Code
var fileup = document.getElementById(clientid);
if(navigator.userAgent.indexOf("Firefox")>0)
{
var spanP = fileup.parentNode;
spanP.innerHTML='<input id="'
+fileup.id
+'" class="inputtext txt2" contenteditable="false" type="file" size="50" name="'
+fileup.name
+'"/>';
}
2.页面上有这样一个功能,就是点击一个js弹出日历上的日期时,要获取这个日期,并依次为参数转到相应的页面.
我随便找了一个日历控件(js),它可以把值付给input的text控件,于是放了一个隐藏的input的text控件,当它的值发生变化时
转到另外一个页面,如何监测这个变化我使用了onpropertychange事件:
Code
function timechange()
{
location.href = a.aspx?document.getElementById("txt_time").value;
}
<a href="#" id="a_time" onclick="MyCalendar.SetDate(this,document.getElementById('txt_time'));">时间</a>
<input style="display:none" type="text" id="txt_time" value="" onpropertychange="timechange();" />
问题是ff上此方法不灵,于是首先想到的用oninput事件来进行替换,遗憾的是oninput事件在用js对input赋值时并不触发
(说明一下用oninput是最好使用addEventListener),后来搜罗一下发现没有什么现成的事件可处理,作后被迫采用了定时器
来实现:
Code
var strTime = '';
function checktime()
{
if(document.getElementById("txt_time").value != strTime)
{
location.href =a.aspx?document.getElementById("txt_time").value;
}
setTimeout("checktime()",100);
}
<a href="#" id="a_time" onclick="MyCalendar.SetDate(this,document.getElementById('txt_time'));">时间</a>
<input style="display:none" type="text" id="txt_time" value="" />
if(navigator.userAgent.indexOf("Firefox")>0)
{
strTime = document.getElementById("txt_time").value;
setTimeout("checktime()",100);
}