如何使用jQuery更新属性?

How can I update attributes with jQuery?

本文关键字:属性 更新 jQuery 何使用      更新时间:2023-09-26
$(document).ready(function() {
    var hero_image = new Array();
    hero_image[0] = new Image();
    hero_image[0].src = 'assets/images/link.png';
    hero_image[0].id = 'image';
    hero_image[1] = new Image();
    hero_image[1].src = 'assets/images/bongo.png';
    hero_image[1].id = 'image';
    hero_image[2] = new Image();
    hero_image[2].src = 'assets/images/gandondorf.jpg';
    hero_image[2].id = 'image';
    hero_image[3] = new Image();
    hero_image[3].src = 'assets/images/queen.png';
    hero_image[3].id = 'image';
  var young_hero = ["Link", "Bongo Bongo", "Gandondorf", "Queen Gohma"];
  var health = [100, 70, 120, 50];
  var attack_power = [];
  var counter_power = [];
console.log(hero_image[0]);
function it_is_over_9000(){
  for (var i = 0; i < young_hero.length; i++) {
    var x = Math.floor(Math.random(attack_power)*20) + 3;
    var y = Math.floor(Math.random(attack_power)*10) + 3;
    attack_power.push(x);
    counter_power.push(y);
  }
}
function ready_board(){
  it_is_over_9000();
  for (var i = 0; i < young_hero.length; i++) {
    var hero_btns = $("<button>");
    hero_btns.addClass("hero hero_button");
    hero_btns.attr({
      "data-name": young_hero[i],
      "data-health": health[i],
      "data-image": hero_image[i],
      "data-attack": attack_power[i],
      "data-counter": counter_power[i],
      "data-index": i
    });

    hero_btns.text(young_hero[i]);
    hero_btns.append(hero_image[i]);
    hero_btns.append(health[i]);
    $("#buttons").append(hero_btns);
  }
}
function char(){
 $(".hero_button").on("click", function() {
    var hero = $(this);
    var hero_select = hero.data('index');

    for (var i = 0; i < young_hero.length; i++) {
      //var attack = ;
      if (i != hero_select){
        var enemies = $("<button>");
        enemies.addClass("hero enemy");
        enemies.attr({
          "data-power" : it_is_over_9000(),
          "data-name": young_hero[i],
          "data-health": health[i],
          "data-image": hero_image[i],
          "data-attack": attack_power[i],
          "data-counter": counter_power[i],
          "data-index": i
        });
        enemies.text(young_hero[i]);
        enemies.append(hero_image[i]);
        enemies.append(health[i]);
        $("#battle").append(enemies);
      }
    }
    $("#buttons").html($(this).data('name','health','image'));
    defender();
  });
}
function defender(){
  $(".enemy").on("click", function() {
    var enemy = $(this);
    var enemy_select = enemy.data("index");
    console.log(enemy_select);
    for (var i = 0; i < young_hero.length; i++) {
      if (i == enemy_select) {
        var defender = $("<button>");
        defender.addClass("hero defender");
        defender.attr({
          "data-name": young_hero[i],
          "data-health": health[i],
          "data-image": hero_image[i],
          "data-attack": attack_power[i],
          "data-counter": counter_power[i],
          "data-index": i
        });
        defender.text(young_hero[i]);
        defender.append(hero_image[i]);
        defender.append(health[i]);
        $("#defend").append(defender);
        $(this).remove();
      }
    }
  });
}
  $(".defend_button").on("click" , function(){
      if($(".defender").data("health") == 0){
        $(".defender").remove();
      } 
        $(".defender").attr({
          "data-health":  $(".defender").data("health") - $(".hero_button").data("attack")
        });       
  });
ready_board();
char();
});

我正在尝试制作一款RPG游戏,我的角色也以我想要的方式生成,但在$("。defen_button").on("click",function()最后它不会更新数据健康。它只更新一次,但在多次点击防御按钮后,它不会在第一次之后更新。

    <!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
      <meta charset="UTF-8">
    <title>Zelda</title>
    <script type='text/javascript' src='https://code.jquery.com/jquery-2.2.0.min.js'></script>
    <script type = "text/javascript" src = "assets/javascript/game.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="assets/css/style.css">
</head>
<style type="text/css">
    .hero { width: 125px; height:150px; border-style: solid; padding: 2px; float: left; margin: 2px; float: left; }
  .letter-button-color { color: darkcyan; }
  .fridge-color { color: orange; }
  #display { margin-top:78px; height:500px; width:220px; margin-left:60px; }
  #buttons { padding-top:60px; }
  #clear { margin-left: 20px; font-size: 25px; color: black; border-style: solid; width: 100px; }
    #image{width: 100px; height: 100px; margin-left: 10px;  }
</style>
<body>
<div class="row">
<div class="col-md-8">Select Your Character</div>
</div>
<div class="row">
<div id="buttons" class="col-md-8"></div>

</div>
<div class="row">
<div id="battle" class="col-md-8">

</div>
</div>
<div class="row">
    <div class="col-md-8">
        <button class="btn btn-primary defend_button">Defend</button>
    </div>
</div>
<div class="row">
<div id="defend">

</div>
</div>


</body>
</html>

您必须使用.data()来更新健康值。

var battleResult = $(".defender").data("health") - $(".hero_button").data("attack");
console.log("battleResult should be: "+battleResult );
$(".defender").data({
    "health":  battleResult
});

我玩了一下你的游戏
我也发现了如何更新图像下面的健康显示…
因为只更新数据不会改变屏幕上的任何东西。

所以,我把上面的代码留在那里,让你看到它有效地工作。
但由于你必须重新创建按钮来更新屏幕上的生命值……这有点没用。

我也修正了死亡条件
源自if($(".defender").data("health") == 0){
对,,,,if($(".defender").data("health") <= 0){

我必须在这里停下来,然后再做更多的事情。
参见CodePen

检查it_is_over_9000()中的循环,因为我认为它经常无用地运行。
一个死去的后卫必须被"埋葬"(lol)。因为当它被杀死时,点击防御按钮就相当于让它复活。div;)

尝试这样设置属性。此外,我建议将$(".defender")放在一个变量中,这样您就不会每次都需要它。

var defender = $(".defender");
var loweredHealth = defender.data("health") -  $(".hero_button").data("attack");
defender.attr('data-health`, loweredHealth);

:

看起来$('.defender')调用将返回多个项目。您要么需要选择特定的defender,要么单独遍历它们,如下所示:

$('.defender').each(function(i, nextDefender) {
    var loweredHealth = nextDefender.data("health") -  $(".hero_button").data("attack");
    nextDefender.attr('data-health`, loweredHealth);
});`