2013-10-08 30 views
0

即时通讯工作在mvc项目,并有一个JavaScript更改鼠标悬停的图像。Javascript - 使用foreach和鼠标悬停更改图像

我的问题是如下:

脚本工作,但只改变图像的第一li元素,然后当我做鼠标移开 it's显示我的最后一个li元素的图像上的位置的第一个李。

我不明白发生了什么。

有人可以给我这只手?

这里是我的代码:

<ul> 
     @foreach (var p in ViewBag.MyIcon) 
      {        
       <li> 

        <script type='text/javascript'> 
         function onHover() { 
          $("#iconInteraction").attr('src', '/Content/iconhover.png'); 
         } 

         function offHover() { 
          $("#iconInteraction").attr('src', '@p.Icon'); 
           } 
        </script> 

        <form action="" method="post"> 

         <button type="submit" name="submit" id="Interface_Button"> 
       <img src="@p.Icon" onmouseover="onHover();" onmouseout="offHover();" id="iconInteraction"/> 
       </button>      
        </form> 
       </li> 
      } 
    </ul> 

回答

2
您正在使用的ID

这是造成问题的原因

    function onHover() { 
         $(".iconInteraction").attr('src', '/Content/iconhover.png'); 
        } 

        function offHover() { 
         $(".iconInteraction").attr('src', '@p.Icon'); 
          } 

更新: 但那不是答案上面的代码只会让所有的iconInteraction更改。

使用这段代码(把它放在网页的头部。

$('.iconInteraction').hover(function(){ 
      $(this).attr('src', '/Content/iconhover.png'); 
} , function(){ 
      $(this).attr('src', '@p.Icon'); 
}); 
+0

我有尝试这个......但现在的所有图像改变鼠标悬停和鼠标移开时我的给我看的最后一个li元素的形象..我已经看到源及其正确的......我不要在哪里失败 – user2232273

+0

@ user2232273,对不起,我付出了足够的关注,我已经更新了答案 –

2

试试这个代码,从而降低了使用复制id中的<script>标签也

<script type='text/javascript'> 
     function onHover(obj) { 
     $("obj").attr('src', '/Content/iconhover.png'); 
     } 

    function offHover(obj) { 
     $("obj").attr('src', $(obj).data('original-src')); 
     } 
    </script> 

<ul> 
    @foreach (var p in ViewBag.MyIcon) 
     {        
      <li> 
       <form action="" method="post"> 
       <button type="submit" name="submit" id="Interface_Button"> 
       <img src="@p.Icon" data-original-src="@p.Icon" 
        onmouseover="onHover(this);" 
        onmouseout="offHover(this);" id="iconInteraction"/> 
       </button>      
       </form> 
      </li> 
     } 
    </ul> 
+0

图像不会改变 – user2232273

+0

@ user2232273,这fucntion不会改变你的形象?在该功能中放置一个“调试器”,看看你在控制台上看到了什么 –

+0

没有图像正在改变...我已经看到输出和所有李有正确的信息 – user2232273

1

Youare号。这就是为什么只有第一个img更改。

尝试更改onmouseoveronmouseout属性是:

onHover.call(this) 
offHover.call(this) 

那么你的代码应该是foreach外面看起来就像这样:

function onHover() { 
     $(this).attr('src', '/Content/iconhover.png'); 
} 

function offHover() { 
     $(this).attr('src', $(this).data('original-src')); 
} 
+0

什么都没有发生。 – user2232273

+0

@ user2232273改变了我的答案,js代码应该在foreach之外并使用'$ .data'。 –

+0

我已经试过这个...但是仍然没有工作..什么都没有发生.... :(什么是头疼 – user2232273

1

好让使简单。在鼠标悬停时,将实际的img-url保存在同一DOM对象(img)的自定义属性(actualUrl)中。在鼠标离开/离开时,将实际的网址恢复为src。

<script type='text/javascript'> 
      var onMouseOver = function(targetImg) { 
      $(targetImg).attr('actualUrl', $(targetImg).prop('src')); 
      $(targetImg).attr('src', '/Content/iconhover.png'); 
      }; 

     var onMouseOut = function(targetImg) { 
      $(targetImg).attr('src', $(targetImg).attr('actualUrl')); 
      $(targetImg).attr('actualUrl', null); // Cleaning data 
     }; 
     </script> 

    <ul> 
     @foreach (var p in ViewBag.MyIcon) 
      {        
       <li> 
        <form action="" method="post"> 
        <button type="submit" name="submit" id="Interface_Button"> 
        <img src="@p.Icon" onmouseover="onMouseOver(this);" 
             onmouseout="onMouseOut(this);"/> 
        </button>      
        </form> 
       </li> 
      } 
     </ul> 
+0

伟大的答案...我现在明白了......但我用另一种方式解决了它...看看我的答案...和+1你的回答 – user2232273

0

我已经解决了它..

我必须做不同的一点点,但它的伟大工程。

我做了什么:

我有发生在按钮标签的鼠标悬停及移出的呼叫,并设置了计数器总是创建图像标签的一个新的ID。

我有添加到鼠标悬停和鼠标移开事件"src"

属性,现在它工作正常。

看看我的工作代码:

希望帮助别人。

@{int x=0;} /**********Create variable and initalize with the value 0***********/ 

    <ul> 
     @foreach (var p in ViewBag.MyIcon) 
      {        
       <li> 

        <form action="" method="post"> 
         <button type="submit" name="submit" onmouseover="document.getElementById('@("icon" + x.ToString())').src='/Content/hovericon.png';" 
onmouseout="document.getElementById('@("icon" + x.ToString())').src='@p.Icon';" > 

          <img src="@p.Icon" id="@("icon" + x.ToString())"/> 

         </button>      
        </form> 
       </li> 

       x = x + 1; /********+1 counter********/ 
      } 
    </ul> 
+0

这样写内联JavaScript并不是一个好习惯,从你的html代码中分离出JavaScript代码,使用JQuery,然后你的代码将被维护和易调试 – Somnath

+0

@Somnath ...我知道它和你是对的......但其他方式它不工作......我必须花一点时间来改善它,但它确定如此...与您的答案和其他用户,我必须做出解决方案并看看我如何得到它的工作... – user2232273

相关问题