ASP.NET实例:无刷新的文件上传(2)
【form】
程序使用_setForm函数来创建用来提交数据的form。
要实现无刷新上传,要对form进行特殊的处理:
ps:详细看这里的无刷新上传部分。
由于form是手动插入的,为了不影响原来页面布局还要设置一下form样式,使它“隐形”起来:
还要注意的是,同一个表单控件只能对应一个form。如果file控件本身已经有一个form的话,必须在提交前移除:
remove方法是用来移除程序的,包括移除form。ps:如果提交前submit被覆盖的话要手动执行一次remove程序。
最后把form插入到dom:
先把form插入到file控件之前,然后把file插入到form,这样就能保证file在原来的位置上了。
【input】
如果有其他参数要传递,程序会使用_setInput函数来创建传递数据的表单控件。
由于生成的form里面只有file控件,要传递其他参数只能用程序生成了。程序用一个_inputs集合来保存当前在form中生成的表单控件。
首先根据自定义的parameter属性创建表单控件:
当form中没有对应name的控件时,会自动生成一个hidden控件插入到form中。其中newInputs是用来记录当前生成的控件的,而oldInputs就是_inputs集合。当设置过对应name的控件后,就从oldInputs中删除对应控件的关联。
然后移除oldInputs关联的控件:
这样就能移除上一次生成的无用的控件了。最后重新记录当前控件到_inputs方便下次使用。
【stop】
如果想停止当前上传操作,可以调用stop方法。
一般来说当iframe发生重载时,会取消上一次的载入,那么只要重新设置src就能取消上传了。测试以下代码:
结果都能取消加载,除了opera,未知什么原因。有两个方法解决,一个是通过form随便用一个action提交一次,还有就是直接移除iframe。后一个方法比较方便,程序中用_removeIframe方法直接移除iframe。ps:有更好方法的话记得告诉我。
【remove】
当使用结束或其他原因要清除程序时,可以调用remove方法。
remove里面主要做的是清除iframe和form。清除iframe用的是_removeIframe方法,首先把onload移除,再把iframe从body移除:
十分简单,但在ff有一个问题,测试以下代码:
提交后都能移除iframe,但ff还一直显示“载入中”的状态。不过解决方法也很简单,用setTimeout设置一个延时,让iframe执行完整就可以了。所以在remove中是这样调用_removeIframe的:
至于form的清除就比较简单,在_removeForm这样处理:
要判断一下parentNode,否则如果parentNode不存在的话后面的会执行出错。