2013-10-08 62 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

相關問題