7

我有一个按钮,里面有一个我想在点击时交换的图像。我得到了那个部分的工作,但现在我也希望它在再次单击时变回原始图像。

我正在使用的代码:

<button onClick="action();">click me<img src="images/image1.png" width="16px" id="ImageButton1"></button>

和 Javascript:

function action() {
  swapImage('images/image2.png');
};

var swapImage = function(src) {
  document.getElementById("ImageButton1").src = src;
}

提前致谢!

4

4 回答 4

2

虽然您可以使用全局变量,但您不需要。当您使用 setAttribute/getAttribute 时,您添加了一些在 HTML 中显示为属性的内容。您还需要注意,添加全局变量只是将变量添加到窗口或导航器或文档对象(我不记得是哪个)。

您还可以将其添加到对象本身(即,如果查看 html,则作为不可见的变量,但如果您在调试器中将 html 元素作为对象查看并查看其属性,则可见。)

这里有两种选择。1 以一种会使其在 html 中可见的方式存储替代图像,而另一个则不会。

<!DOCTYPE html>
<html>
<head>
<script>
function byId(e){return document.getElementById(e);}

window.addEventListener('load', mInit, false);

function mInit()
{
    var tgt = byId('ImageButton1');
    tgt.secondSource = 'images/image2.png';
}

function byId(e){return document.getElementById(e);}

function action() 
{
    var tgt = byId('ImageButton1');
    var tmp = tgt.src;
    tgt.src = tgt.secondSource;
    tgt.secondSource = tmp;
};

function action2()
{
    var tgt = byId('imgBtn1');
    var tmp = tgt.src;
    tgt.src = tgt.getAttribute('src2');
    tgt.setAttribute('src2', tmp);
}
</script>
<style>
</style>
</head>
<body>
    <button onClick="action();">click me<img src="images/image1.png" width="16px" id="ImageButton1"></button>
    <br>
    <button onClick="action2();">click me<img id='imgBtn1' src="images/image1.png" src2='images/image2.png' width="16px"></button>
    </body>
</html>
于 2013-05-19T10:22:19.883 回答
0

It's not a good idea to use global variables in javascripts use a closure or object literal. You can do something like using a closure

(function(){
  var clickCounter = 0;
  var imgSrc1 = "src to first image";
  var imgSrc2 = "src to second image"
  functions swapImage (src)
  {
   var imgBut = document.getElementById("ImageButton1");
   imgBut.src = src;
  }

  function action()
  {
  if(clickCounter === 1)
  {
    swapImage(imgSrc1);
    --clickCounter;
  }else{
    swapImage(imgSrc2);
    ++clickCounter;
  }
}
})();

(I haven't run this code though)

This nice w3documentation gives you best practices.

于 2013-05-19T09:44:55.990 回答
0

您需要将旧值存储在全局变量中。

例如:

var globalVarPreviousImgSrc;
var swapImage = function(src)
{
   var imgBut = document.getElementById("ImageButton1");

   globalVarPreviousImgSrc = imgBut.src;
   imgBut.src = src;
}

然后在 action 方法中,您可以检查它是否等于旧值

function action()
{
  if(globalVarPreviousImgSrc != 'images/image2.png')
  {
    swapImage('images/image2.png');
  }else{
    swapImage(globalVarPreviousImgSrc);
  }
}
于 2013-05-19T09:28:30.160 回答
0

检查这是一个工作示例,只需复制粘贴并运行-

HTML

<button onClick="action();">click me<img src="http://dummyimage.com/200x200/000000/fff.gif&text=Image+1" width="200px" id="ImageButton1"></button>

JAVASCRIPT

<script>
function action()
{
if(document.getElementById("ImageButton1").src == 'http://dummyimage.com/200x200/000000/fff.gif&text=Image+1' )
document.getElementById("ImageButton1").src = 'http://dummyimage.com/200x200/dec4ce/fff.gif&text=Image+2';
else
document.getElementById("ImageButton1").src = 'http://dummyimage.com/200x200/000000/fff.gif&text=Image+1';
}
</script>

检查这个工作示例 - http://jsfiddle.net/QVRUG/4/

于 2013-05-19T09:32:50.430 回答