javascript - JQuery onclick 覆盖 div

标签 javascript jquery html

我正在尝试学习 JS,并且正在尝试制作简单的应用程序。现在我遇到了一些问题。

var animals = [
	{ name: "Dog", url: 'https://animal-health.co.uk/media/wysiwyg/alfie-dog.png', clicks: 0},
	{ name: "Cat", url: 'https://media3.giphy.com/media/o0vwzuFwCGAFO/200_s.gif', clicks: 0}
]

// animals[0].name
// animals[0].url
// animals[0].clicks

var brojac = animals[0].clicks;
var clicks = animals[1].clicks;

$(document).ready(function(){

    $( "#pas" ).one( 'click', function(){
        brojac++
        var heading = $('<h1>');
        heading.text(animals[0].name);
        $('#podaci').append(heading);

        var slika = $('<img src=' + animals[0].url + '>');
        $('#podaci').append(slika);

        var brojac = $('<p class="test">' + 'Number of clicks:' + '<span id="increment">' + animals[0].clicks + '</span>' + '</p>'); 
        $('#podaci').append(brojac);
    });

    $('#pas').click(function(){
        brojac += 1;
        $("#increment").text(brojac);
    });

    $( "#macka" ).one( 'click', function(){
        clicks++
        var heading = $('<h1>');
        heading.text(animals[1].name);
        $('#podaci').append(heading);

        var slika = $('<img src=' + animals[1].url + '>');
        $('#podaci').append(slika);

        var clicks = $('<p class="test">' + 'Number of clicks:' + '<span id="increment">' + animals[1].clicks + '</span>' + '</p>'); 
        $('#podaci').append(clicks);
    });

    $('#macka').click(function(){
        clicks += 1;
        $("#increment").text(clicks);
    });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="container">
    <span id="pas">Dog</span>
    <span id="macka">Cat</span>
</section>
<div class="container" id="podaci">
    This is where it goes
</div>

当我单击 DOG 然后单击 CAT 时,它们都出现在屏幕上,但这不是我想要的。当我按下 CAT 时,我希望它覆盖 DOG,因此只有一个出现在屏幕上,我希望计数器继续计算点击次数。 这里还有 JSBin,因此您可以更好地了解正在发生的事情:http://jsbin.com/pebefu/edit?html,js,output

最佳答案

您不必一直删除和附加元素。您可以使用以下方法简化代码并重用元素:

https://jsfiddle.net/tqoymucy/

注意:在许多情况下,从一开始就为两种动物创建 html 并只切换它们的可见性可能会更好。如果您有许多不同的动物,下面的解决方案会更有效。

var clicks = [0 , 0];
var animals = [{
  name: "Dog",
  url: 'https://animal-health.co.uk/media/wysiwyg/alfie-dog.png',
  clicks: 0
}, {
  name: "Cat",
  url: 'https://media3.giphy.com/media/o0vwzuFwCGAFO/200_s.gif',
  clicks: 0
}];

$(document).ready(function() {
  $(".animalSelector").one('click', function() {
    $('#activeAnimal').removeClass("hidden");
  });

  $('#pas').click(function() {
    changeAnimal(0);
  });

  $('#macka').click(function() {
    changeAnimal(1);
  });
  
  function changeAnimal(index) {
    clicks[index] += 1;
    $('#animalHeader').text(animals[index].name);
    $('#animalImage').attr("src", animals[index].url);
    $("#increment").text(clicks[index]);
  }    
});
.animalSelector {
  cursor: pointer;
}

#macka {
  margin-left: 3em;
  cursor: pointer;
}

#activeAnimal.hidden {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="container">
  <span id="pas" class="animalSelector">Dog</span>
  <span id="macka" class="animalSelector">Cat</span>
</section>
<div class="container" id="podaci">
  <p class="placeholder">This is where it goes</p>
  <div id="activeAnimal" class="hidden">
    <h1 id="animalHeader"></h1>
    <img id="animalImage" />
    <p class="clickCounter">Number of clicks: <span id="increment">0</span></p>
  </div>
</div>

关于javascript - JQuery onclick 覆盖 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065158/

相关文章:

javascript - 使用 on() 和 mouseenter/mouseleave 防止闪烁/代码运行过于频繁

javascript - 如何使用带有复选框的事件触发器访问 ID 数组?

javascript - jQuery 悬停问题

javascript - 使用 Javascript 将 DIV 高度设置为 100% 导致跨浏览器问题

javascript - jQuery 平滑滚动问题,页面 'blinks' 一秒钟

javascript - 如果 div 移动,Angularjs ng-repeat 不起作用

javascript - React Native - 文档未定义

javascript - 此代码不会向网页输出任何内容?

html - 在网页中显示两种语言的文本,在 css 规则中使用不同字体的字体

jquery - 如何设置窗口位置?