2

これが、srcをホバーしたときに変更されていることを示すことができる状況ですが、画面自体の画像は実際には変更されません。どんな助けでも大きな助けになるでしょう。

$('.hoverImgs').hover(
function(){mouseOn = 1; formSelector('hover');},
function(){mouseOn = 0; formSelector('out');
});

function formSelector(method){
if(mouseOn === 1 && method === 'hover'){       
    $(this).attr("src", "images/radio_hover.png");
    alert($(this).attr("src"));
}
else {}
}
});
4

2 に答える 2

2

formSelector関数を呼び出すとコンテキストが失われthis、関数内のオブジェクトがウィンドウ化されます。thisオブジェクトを引数として渡すか、を使用して関数を呼び出す必要があります.call/.apply

以下のようにしてみてください、

$(function () {
   var mouseOn;
   $('.hoverImgs').hover(
      function(){ mouseOn = 1; formSelector('hover', this); },
      function(){mouseOn = 0; formSelector('out', this); }
   );

  function formSelector(method, thisObj){
     if(mouseOn === 1 && method === 'hover'){       
       thisObj.src = "images/radio_hover.png";
       alert(thisObj.src);
     }
     else {}
   }

});
于 2012-11-14T04:36:35.963 に答える
2

});まず、最後に余分なものがあります。

あなたの本当の問題:thisあなたが思っていることではありません。そのコンテキストでthisは、画像ではなくウィンドウオブジェクトを指します。これを修正する1つの方法は、画像要素を関数に渡すことです。

$('.hoverImgs').hover(
  function(){mouseOn = 1; formSelector($(this), 'hover');},
  function(){mouseOn = 0; formSelector($(this), 'out');}
);

function formSelector(elem, method){
  if(mouseOn === 1 && method === 'hover'){
    console.log(elem.attr('src'));
    elem.attr("src", "https://www.google.com/images/srpr/logo3w.png");
  }
}

デモ

于 2012-11-14T04:36:47.187 に答える