使用JavaScript

时间:2016-06-15 07:18:27

标签: javascript

这真的吓坏了我。

我正在尝试使用JavaScript关键字单击时更改图像的源属性。

虽然我观看过的一些视频确实对我有帮助,但使用的方法实在令人困惑。

请亲们体验一下民众应该向我解释一下。

<html>
    <head>
        <script>
            var image_tracker = 'p';
            function change() {
                var image = document.getElementById('pics');
                if (image_tracker == 'p') {  
                    image.src = 'Tulips.jpg';
                    image_tracker = 't'; 
                } else {
                    image.src = 'Penguins.jpg';
                    image_tracker = 'p';
                }
            }
        </script>
      <title></title>
    </head>
    <body>
        <h1>JavaScript Tutorial</h1>
        <img src="Penguins.jpg" alt="pics" id="demo" onclick="change();">
    </body>
</html>

我的实际困惑是,无法在函数内声明跟踪器变量吗?

我实际上尝试在函数内声明它并且它不起作用。

请好心人,告诉我我不知道的事。

我的实际困惑是为什么我不能在函数内声明变量跟踪器?

请不要介意代码,我的困惑只是变量声明

3 个答案:

答案 0 :(得分:3)

您声明变量外部函数以保留下一个函数调用的值。

如果你在函数内声明它,它的值将在下一个函数调用时重置:

&#13;
&#13;
var trigger1 = 'f';

function testTrigger() {
  var trigger2 = 'f';
  console.log('Trigger 1: ' + trigger1 + ' | Trigger 2: ' + trigger2);
  
  if (trigger1 == 't') {
    trigger1 = 'f';
    trigger2 = 'f';
  } else {
    trigger1 = 't';
    trigger2 = 't';
  }
}

testTrigger();
testTrigger();
testTrigger();
testTrigger();
&#13;
&#13;
&#13;

答案 1 :(得分:1)

首先,添加一个函数名称。

至于为什么声明函数内部的变量不起作用,这是因为如果你这样做,每次调用函数时,变量将被重置为其原始值,即t in你的情况。由于您希望此值在多个函数调用中保持不变,因此您需要某种方法将此值存储在某处,以便在下次调用函数时获取最后存储的值。

您可以在函数内定义变量而不使用关键字var。这将使其全球化。我不确定这是解决问题的最佳方法,但这样可行。

function change() {
  tracker = 't';
  var image = document.getElementById('img');

  if (tracker == 't') {
    image.src = 'photo.jpg';
    tracker = 'f';  
  } else {
    image.src = 'picture.jpg';
    tracker = 't';
  }
}

如果您想避免将tracker作为全局变量,则另一种方法可能是将值保存为data标记本身的img属性。因此,每次运行函数时,首先获取属性值,相应地执行代码,然后将新更新的值保存在属性中。

<img data-tracker="t" src="Penguins.jpg" alt="pics" id="demo" onclick="change();">

function change() {
  var image = document.getElementById('img');
  var tracker = image.getAttribute("data-tracker");

  if (tracker == 't') {
    image.src = 'photo.jpg';
    // tracker = 'f';  
    image.setAttribute("data-tracker", "f");
  } else {
    image.src = 'picture.jpg';
    // tracker = 't';
    image.setAttribute("data-tracker", "t");
  }
}

答案 2 :(得分:-1)

如果您在内部定义它,那么每次运行该功能时,&#39;跟踪器&#39;将是init