2010-01-22 60 views
4

我正在使用javascript来更改鼠标悬停上的一些asp按钮设置。它在IE中工作。但不适用于Firefox。有没有其他的JavaScript代码可以支持几乎所有的浏览器?我的代码如下Windows.event是未定义的 - 在Firefox中的JavaScript错误

<script type="text/javascript"> 
     var previousColor; 
     function Changecolor() { 
      previousColor = window.event.srcElement.style.backgroundColor; 
      window.event.srcElement.style.backgroundColor = "Blue"; 
      window.event.srcElement.style.cursor = "hand"; 
     } 
     function RestoreColor() { 
      window.event.srcElement.style.backgroundColor = previousColor; 
     } 
</script> 


<asp:Button ID="btnSearch" runat="server" BackColor="#800000" Font-Bold="True" Font-Names="Arial" onmouseover="Changecolor();" onmouseout="RestoreColor();" ForeColor="White" Height="28px" OnClick="btnSearch_Click2" Text="Search Jobz" Width="117px" /> 
+1

你为什么这么难?只需使用CSS。 – ZippyV 2010-01-22 09:24:56

+0

事实上,对于这种事情,CSS是更好的选择,尽管':hover'在IE6中无效,没有[whatever:hover](http://www.xs4all.nl/~peterned/csshover.html) – 2010-01-22 09:31:38

回答

8

看看Mozilla开发者中心的文档上events。在Internet Explorer中,全局事件对象在事件触发时创建。在符合标准的浏览器中,事件对象作为分配给触发事件的函数的第一个参数传递。如果您的事件是在HTML中定义的,则事件对象将在变量名称event下创建,并可以传递给您要调用的函数。

另请注意,event.srcElement属性仅为IE,其他浏览器大多使用event.target

考虑到这一点,你的函数应该是这样的:

<script> 
     var previousColor; 
     function Changecolor(evt) { 
      var srcEl = evt.srcElement || evt.target; 
      previousColor = srcEl.style.backgroundColor; 
      srcEl.style.backgroundColor = "Blue"; 
      srcEl.style.cursor = "pointer"; 
     } 
     function RestoreColor(evt) { 
      var srcEl = evt.srcElement || evt.target; 
      srcEl.style.backgroundColor = previousColor; 
     } 
</script> 


<asp:Button ID="btnSearch" runat="server" BackColor="#800000" Font-Bold="True" Font-Names="Arial" onmouseover="Changecolor(event);" onmouseout="RestoreColor(event);" ForeColor="White" Height="28px" OnClick="btnSearch_Click2" Text="Search Jobz" Width="117px" /> 
+0

谢谢!它的工作..但是,光标无法正常工作..我看不到在谷歌浏览器和火狐浏览器中的手形符号 – Nila 2010-01-22 09:42:26

+2

好的..我用“指针”而不是“手”..现在它为我工作: - )非常感谢... – Nila 2010-01-22 09:51:30

+0

啊,你打败了我。很高兴我能帮上忙。 – 2010-01-22 09:54:43

1

你为什么不使用CSS(其:hover伪类),而不是JS?

但是,如果你需要使用JS的一些原因只是通过参考元素作为功能参数:

function Cangecolor(ref){ 
    prevousColor = ref.style....; 

... 

onmouseover="changecolor(this)" 

现在您的代码不工作,因为IE使用不同的事件模型(好的浏览器使用W3C事件模型,但IE使用它自己)。你可以阅读关于W3C/IE事件模型:How to equalize the IE and W3C event models]

1

你不需要打扰事件对象。另外,游标CSS属性的正确值是“指针”,而不是特定于IE的“手”,除非您需要支持IE 5或5.5。

<script type="text/javascript"> 
     var previousColor; 

     function changeColor(el) { 
      var s = el.style; 
      previousColor = s.backgroundColor; 
      s.backgroundColor = "Blue"; 
      s.cursor = "pointer"; 
     } 
     function restoreColor(el) { 
      el.style.backgroundColor = previousColor; 
     } 
</script> 


<asp:Button ID="btnSearch" runat="server" BackColor="#800000" 
    Font-Bold="True" Font-Names="Arial" 
    onmouseover="changeColor(this);" onmouseout="restoreColor(this);" 
    ForeColor="White" Height="28px" OnClick="btnSearch_Click2" 
    Text="Search Jobz" Width="117px" /> 
+0

不适用于他的问题中指定的代码,但我想我会在事件对象中包含事件对象,以防万一他的样本是大部分代码的简化版本案件:) +1 – 2010-01-22 09:43:10

+0

@安迪E:同意了,如果你还没有这样做,我可能也会这样做。 – 2010-01-22 10:05:30

1

我在下面的代码中面对同样的问题(window.event在firefox中)。

<html> 
<body onkeyup="fClosePop();"> 
</body> 
<script language="javascript"> 
    function fClosePop(){ 
     var e= (window.event)?event.keyCode:evt.which; 
     if(e.keyCode ==27) 
     { 
      try 
      { 
       alert(1); 
      } 
      catch(e) 
      { 

      } 
     }  
    } 
</script> 
</html> 

然后我试着调整代码,发现下面的解决方案。 我刚刚通过该函数的事件。

<html> 
<body onkeyup="fClosePop(even);"> 
</body> 
<script language="javascript"> 
    function fClosePop(e){ 
      if(e.keyCode ==27) 
      { 
         try 
         { 
         alert(1) 
         } 
         catch(e) 
         { 

         } 
      }  
    } 
</script> 
</html> 

我希望这会对您有所帮助。