새로 고침 시 window.location.reload를 사용하세요. 데이터를 제출하면 귀찮은 대화 상자가 나타납니다!
이 문제를 해결하려면 다음과 같이 작성해야 합니다.
window.location.href=window.location.href; window.location.reload;
마찬가지로 상위 창을 새로 고치려면 다음과 같이 작성해야 합니다. 이:
window.opener.location.href=window.opener.location.href; window.opener.location.reload();
이렇게 작성하면 짜증나는 대화 상자가 사라집니다!
JS로 iframe을 새로 고치는 방법 소개
옵션 1: iframe의 name 속성을 사용하여
<input type="button" name="Button" value="Button" onclick="document.frames('ifrmname').location.reload()">또는
<input type="button" name="Button" value="Button" onclick="document.all.ifrmname.document.location.reload()">해결 방법 2: iframe의 id 속성을 사용하여
<input type="button" name="Button" value="Button" onclick="ifrmid.window.location.reload()">을 찾습니다. 궁극적인 해결 방법: iframe의 src가 다음과 같은 경우 다른 웹사이트 주소 (크로스도메인 운영)
<input type="button" name="Button" value="Button" onclick="window.open(document.all.ifrmname.src,'ifrmname','')">다음에서는 Internet Explorer 대신 IE를 사용하고, Mozzila Firefox 대신 MF를 사용합니다document.form. 항목 문제
(1) 기존 문제:
기존 코드에 document.formName.item("itemName")과 같이 MF에서 실행할 수 없는 문이 많이 있습니다
(2) 해결 방법:
대신 document.formName.elements["elementName"]을 사용하세요. (3) 기타
2
참조 2. 컬렉션 클래스 객체 문제
다수의 컬렉션 클래스 객체 기존 코드에서는 액세스할 때 ()를 사용하지만 IE는 허용할 수 있지만 MF는 허용할 수 없습니다.
(2) 해결 방법:
대신 []를 아래 첨자 연산으로 사용하세요. 예: document.forms("formName")는 document.forms["formName"]으로 변경됩니다.
또 다른 예: document.getElementsByName("inputName")(1)이 document.getElementsByName("inputName")[1]으로 변경됨
(3) 기타
window.event
window.event를 사용하여 MF에서 실행할 수 없습니다
(2) 해결 방법 :
MF 이벤트는 이벤트가 발생한 현장에서만 사용할 수 있으며 아직 이 문제를 해결할 수 없습니다. . 다음과 같이 수정할 수 있습니다.
원본 코드(IE에서 실행 가능):
<input type="button" name="someButton" value="提交" onclick=""/> <script language="javascript"> function gotoSubmit() { alert(window.event); // use window.event } </script>
<input type="button" name="someButton" value="提交" onclick=""/> <script language="javascript"> function gotoSubmit(evt) { evt = evt ? evt : (window.event ? window.event : null); alert(evt); // use evt } </script>
게다가 새 코드의 첫 번째 줄이 변경되지 않고 이전 코드와 동일하면(즉, gotoSubmit 호출이 매개변수를 제공하지 않음) IE에서만 실행되지만 오류는 발생하지 않습니다. 발생합니다. 따라서 이 솔루션의 tpl 부분은 여전히 이전 코드와 호환됩니다.
4. HTML 개체의 ID를 개체 이름으로 사용하는 문제
(1) 기존 문제 IE에서는 HTML 개체의 ID를 변수 이름으로 직접 사용할 수 있습니다. 문서의 하위 객체. MF에는 없습니다.
(2) 해결 방법
객체 변수로 idName 대신 getElementById("idName")를 사용하세요.
5. idName 문자열을 사용하여 개체를 가져올 때 발생하는 문제
IE에서는 eval(idName)을 사용하여 idName의 HTML 개체를 가져올 수 있지만 MF.
(2) 해결 방법
eval(idName) 대신 getElementById(idName)를 사용하세요.
6. 변수 이름이 HTML 객체 ID와 동일하다는 문제
MF에서는 객체 ID를 HTML 객체 이름으로 사용하지 않기 때문에 , HTML 객체와 함께 사용할 수 있습니다. 동일한 ID를 가진 변수 이름은 IE에서 사용할 수 없습니다.
(2) 해결 방법
변수 선언 시 모호함을 피하기 위해 항상 var를 추가해 IE에서도 정상적으로 실행되도록 해주세요.
또한 오류를 줄이기 위해 HTML 개체 ID와 동일한 변수 이름을 사용하지 않는 것이 가장 좋습니다.
(3) 기타
질문 4 참조
7. event.x 및 event.y 문제
IE에서는 이벤트 개체에 x, y가 있습니다. MF에서는 사용할 수 없는 속성입니다.
(2) 솔루션
MF에서는 event.x에 해당하는 것이 event.pageX입니다. 그러나 IE에서는 event.pageX를 사용할 수 없습니다.
따라서 event.x 대신 event.clientX가 사용됩니다. 이 변수는 IE에도 존재합니다.
event.clientX와 event.pageX(전체 페이지에 스크롤 막대가 있는 경우) 사이에는 미묘한 차이가 있지만 대부분 동일합니다.
如果要完全一样,可以稍麻烦些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
(3)其它
event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。
8. 关于frame
(1)现有问题
在 IE中 可以用window.testFrame取得该frame,mf中不行
(2)解决方法
在frame的使用方面mf和ie的最主要的区别是:
如果在frame标签中书写了以下属性:
577f8a8d0e4437ad5b916f8ba417a1ef
那么ie可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
ie: window.top.frameId或者window.top.frameName来访问这个window对象
mf: 只能这样window.top.frameName来访问这个window对象
另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容
关于frame和window的描述可以参见bbs的‘window与frame'文章
以及/test/js/test_frame/目录下面的测试
----adun 2004.12.09修改
9. 在mf中,自己定义的属性必须getAttribute()取得
10.在mf中没有 parentElement parement.children 而用
parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。
当html中节点缺失时,IE和MF对parentNode的解释不同,例如
<form> <table> <input/> </table> </form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)
11.const 问题
(1)现有问题:
在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
(2)解决方法:
不使用 const ,以 var 代替。
12. body 对象
MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在
13. url encoding
在js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
一般会服务器报错参数没有找到
当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&
14. nodeName 和 tagName 问题
(1)现有问题:
在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
有问题(具体情况没有测试,但我的IE已经死了好几次)。
(2)解决方法:
使用 tagName,但应检测其是否为空。
15. 元素属性
IE下 input.type属性为只读,但是MF下可以修改
16. document.getElementsByName() 和 document.all[name] 的问题
(1)现有问题:
在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。
1,document.getElementById替代document.all(ie适用)
2,集合[]替代()(ie适用)
3,target替代srcElement;parentNode替代parentElement(parentNode ie适用)
4,node.parentNode.removeChild(node)替代removeNode(this)(ie适用)
5,有空白文本节点
6,无outerHTML属性
7,事件局部变量e替代事件全局变量event
8,e.button键值有别于event.button,只有3个键值而无组合键值
9,无ondrag事件
10,DOMMouseScroll替代onmousewheel;-e.detail替代event.wheelDelta
11,addEventListener替代attachEvent;removeEventListener替代detachEvent
12,e.preventDefault()替代event.returnValue=false;e.stopPropagation()替代event.cancelBubble=true
13,style.top、style.left等严格检查"px"单位(加"px" ie适用)
14,style="-moz-opacity:0.9"替代style="filter:alpha(opacity=90)";无其它filter
15,style.cursor="pointer"替代style.cursor="hand"(ie适用)
16,title替代alt(ie适用)
17,状态栏默认不可修改,需调整ff设置
18,内置绘图功能以canvas或者SVG替代vml
19,代码出错时经常不报错(想来也是ff的无奈之举吧,如果每个ie独有的表达方式换在它里面都报错的话,怕是报都报不过来吧)
20,对缓存的清理非常不好
注:标明“ie适用”者为通用性建议写法,未标明者在ie里不适用。
以下所有IE指IE6.0
验证是否是IE浏览器(来之于google js)
var agt=navigator.userAgent.toLowerCase();
var is_ie=(agt.indexOf("msie")!=-1 && document.all);
正式开始
事件委托方法
IE
document.body.onload = inject; //Function inject()在这之前已被实现 firefox document.body.onload = inject();
有人说标准是:
document.body.onload=new Function('inject()');
在firefox无法取得event.srcElement
通过其他方式传递对象
if(isIE) thistable.attachEvent("onmousedown",OnClickChangeTdBackColor); //thistable.onmousedown=OnClickChangeTdBackColor; else//deal firefox { for(var i=0;i<thistable.rows.length;i++) { var rowObj = thistable.rows[i]; for( var j=0;j<rowObj.cells.length;j++) { var cellObj = rowObj.cells[j]; cellObj.setAttribute("onmousedown","OnClickChangeTdBackColor(this)"); } //alert(rowObj.cells[0].tagName); } }
这是来之 http://blog.joycode.com/lostinet/archive/2005/02/27/44999.aspx
在FireFox下编写事件处理函数是很麻烦的事.
因为FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明时间处理函数的第一个参数为event.
所以为了兼容IE与FireFox,一般的事件处理方法为:
btn.onclick=handle_btn_click; function handle_btn_click(evt) { if(evt==null)evt=window.event;//IE //处理事件. }
对于简单的程序,这不算麻烦.
但对于一些复杂的程序,某写函数根本就不是直接与事件挂钩的.如果要把event传进该参数,那么所有的方法都要把event传来传去..这简直就是噩梦.
下面介绍一个解决这个麻烦事的方法,与原理.
JScript中,函数的调用是有一个 func.caller 这个属性的.
例如
function A() { B(); } function B() { alert(B.caller); }
如果B被A调用,那么B.caller就是A
另外,函数有一个arguments属性. 这个属性可以遍历函数当前执行的参数:
function myalert() { var arr=[]; for(var i=0;i arr[i]=myalert.arguments[i]; alert(arr.join("-")); } alert("hello","world",1,2,3)
就能显示 hello-world-1-2-3
(arguments的个数与调用方有关,而与函数的参数定义没有任何关系)
根据这两个属性,我们可以得到第一个函数的event对象:
btn.onclick=handle_click; function handle_click() { showcontent(); } function showcontent() { var evt=SearchEvent(); if(evt&&evt.shiftKey)//如果是基于事件的调用,并且shift被按下 window.open(global_helpurl); else location.href=global_helpurl; } function SearchEvent() { func=SearchEvent.caller; while(func!=null) { var arg0=func.arguments[0]; if(arg0) { if(arg0.constructor==Event) // 如果就是event 对象 return arg0; } func=func.caller; } return null; }
这个例子使用了SearchEvent来搜索event对象. 其中 'Event' 是 FireFox 的 event.constructor .
在该例子运行时,
SearchEvent.caller就是showcontent,但是showcontent.arguments[0]是空.所以 func=func.caller 时,func变为handle_click .
handle_click 被 FireFox 调用, 虽然没有定义参数,但是被调用时,第一个参数就是event,所以handle_click.arguments[0]就是event !
针对上面的知识,我们可以结合 prototype.__defineGetter__ 来实现 window.event 在 FireFox 下的实现:
下面给出一个简单的代码.. 有兴趣的可以补充
if(window.addEventListener) { FixPrototypeForGecko(); } function FixPrototypeForGecko() { HTMLElement.prototype.__defineGetter__("runtimeStyle",element_prototype_get_runtimeStyle); window.constructor.prototype.__defineGetter__("event",window_prototype_get_event); Event.prototype.__defineGetter__("srcElement",event_prototype_get_srcElement); } function element_prototype_get_runtimeStyle() { //return style instead... return this.style; } function window_prototype_get_event() { return SearchEvent(); } function event_prototype_get_srcElement() { return this.target; } function SearchEvent() { //IE if(document.all) return window.event; func=SearchEvent.caller; while(func!=null) { var arg0=func.arguments[0]; if(arg0) { if(arg0.constructor==Event) return arg0; } func=func.caller; } return null; } </body></html>
firefox与IE(parentElement)的父元素的区别
因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.
IE
obj.parentElement
firefox
obj.parentNode
asp.net中UniqueID和clientID的区别
要使用document.getElementById 方法,则使用控件的时候要这样来作
"javascript:OnSelectSubCatalog(\""+subCatalog_drp.ClientID+"\","+catalogIDX+","+catID.ToString()+")";
调用Select元素的区别
移出一个选择项
--------------------------------------------------------------------------------
IE :sel.options.remove(sel.selectedIndex);
firefox :
增加选择项:
--------------------------------------------------------------------------------
IE: subCatalog.add(new Option(text,value));
firefox:
var opnObj = document.createElement("OPTION");
//opnObj.id = optionID;
opnObj.value = value;
opnObj.text = text;
subCatalog.appendChild(opnObj);
cursor:hand VS cursor:pointer
위 내용은 window.location.reload 새로고침 사용분석(대화상자로 이동)_기본지식 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!