论坛首页 Web前端技术论坛

关于Event.observe的问题

浏览 14658 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-07  
<html>

<head>
<script src="prototype.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
    Event.observe(window,'load',
        function(){Event.observe('set1','change',
                    function(){
                        //在ff下
                        if(this.vlaue)
                             $('tx1').hide();
                        else   
                            $('tx1').show();
                        //在ie下this没有指象select
                        if(event.srcElement.value)
                            $('tx1').hide();
                        else
                          $('tx1').show();
                    })
                    })
    
</script>
<title></title>

</head>

<body>
    <input id='tx1' name='tx1'/>
    <select id='set1' >
        <option >choose</option>
        <option value='1' >1</option>
        <option >2</option>
        <option >3</option>
    </select>
</body>

</html>

在ff下this指向select元素,在ie下我用for in 只打出了_extend不知道为什么?prototype不是跨浏览器吗
   发表时间:2007-06-07  
FF下是使用addEventListener,会把this传进去,而IE是attachEvent是不会把this传进去的,或者说this指向的仍然是window对象
0 请登录后投票
   发表时间:2007-06-07  
非常感谢,那怎样写可以通用呢
0 请登录后投票
   发表时间:2007-06-07  
 _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

我看了prototype.js的源码,是说ie的attachEvent的方法不能把this指针传进去吗
0 请登录后投票
   发表时间:2007-06-07  
此乃MS被人咒骂的问题之一。prototype只是稍稍包装,并没有解决所有的问题。也许以后的版本会。或者你可以用其他解决这个问题的库。
0 请登录后投票
   发表时间:2007-06-07  
用bind
    <html>  
      
    <head>  
    <script src="http://www.iteye.com//javascripts/prototype.js?1157705297" type="text/javascript"></script>  
    <script language="javascript" type="text/javascript">  
        Event.observe(window,'load',  
            function(){Event.observe('set1','change',  
                        (function(){  $('tx1').value=this.value;}).bind($('set1'))
						)  
                    })  
      
 </script>  
 <title></title>  
   
 </head>  
   
 <body>  
     <input id='tx1' name='tx1'/>  
     <select id='set1' >  
         <option value='0'>choose</option>  
         <option value='1' >1</option>  
        <option value='2'>2</option>  
         <option value='3'>3</option>  
     </select>  
 </body>  
   
 </html>  
0 请登录后投票
   发表时间:2007-06-07  
非常感谢楼上,后来我发下prototype得api中建议使用bindAsEventListener这个方法,我看了他得源码,
在bind 中返回得是
 return __method.apply(object, args.concat($A(arguments)));

在bindAsEventListener中返回
return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));

我试了用bindAsEventListener也可以使this指向select,但区别在那,我的理解是下边这个不仅是this指向指定的元素,而且把event也带进这个方法里,也就是当在ff下event不会为undefined,不知是不是这么理解
0 请登录后投票
   发表时间:2007-06-07  
campaign 写道
非常感谢楼上,后来我发下prototype得api中建议使用bindAsEventListener这个方法,我看了他得源码,
在bind 中返回得是
 return __method.apply(object, args.concat($A(arguments)));

在bindAsEventListener中返回
return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));

我试了用bindAsEventListener也可以使this指向select,但区别在那,我的理解是下边这个不仅是this指向指定的元素,而且把event也带进这个方法里,也就是当在ff下event不会为undefined,不知是不是这么理解

完全正确
0 请登录后投票
   发表时间:2007-06-07  
不对呀,我刚测过了,
    (function(){ alert(this.value);alert(event);}).bindAsEventListener($('set1')))

在ie中可以打出[object],在ff下可以打出undefiend,?
还有我想问问,[( event || window.event)].concat(args).concat($A(arguments))这种写法的意思是什么呢,concat是string的组合方法,[( event || window.event)]返回的应该是一个event对象把
,对象的concat不理解,高手给解释一下把,谢谢了
0 请登录后投票
   发表时间:2007-06-07  
campaign 写道
不对呀,我刚测过了,
    (function(){ alert(this.value);alert(event);}).bindAsEventListener($('set1')))

在ie中可以打出[object],在ff下可以打出undefiend,?
还有我想问问,[( event || window.event)].concat(args).concat($A(arguments))这种写法的意思是什么呢,concat是string的组合方法,[( event || window.event)]返回的应该是一个event对象把
,对象的concat不理解,高手给解释一下把,谢谢了

(function(e){ alert(this.value);alert(e);}).bindAsEventListener($('set1')))
这样写!

concat是数组的方法,建议补补基础。
[( event || window.event)].concat(args).concat($A(arguments))
其实组成一个大数组,当作参数的。

(function(a,b,c){ alert(a);alert(b);alert(c);}).bindAsEventListener($('set1')))
这样看看。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics