0

動的に作成されたオブジェクトの属性を操作したいと考えています。

以下のコードでは、オブジェクトの対応する関数を呼び出してlike属性を増やしたいと考えています。ただし、要素は動的に作成され、onclick関数でthisを渡すと、アンカー タグのみが参照されます。

アイデアは、各質問に承認または非承認のさまざまなアイデアが含まれるこのフォーラムに似ています。各オブジェクトの属性を個別に操作するにはどうすればよいですか?

function idea(idea) {
    this.ideatext = idea;
    this.like = 0;
    this.str = "\
    <div class = 'entered'> \
        <div class = 'text'> " + this.ideatext + "</div> \
        <div class = 'anchors'> \
            <a href = '' onclick = 'increase()'> Approve </a> \
            <a href = '' onclick = 'decrease()'> Disapprove </a> \
        </div> \
    </div>";

    this.increase = function() {
        this.like++;
    }
    this.decrease = function() {
        this.like--;
    }
}

var ideaobj1 = new idea(someidea1);
var ideaobj2 = new idea(someidea2);
4

3 に答える 3

1

JavaScript コードを動的に作成し、そのコードで他の JavaScript コードを参照する場合は、変数名を知っておく必要があります。それを回避する方法はありません。

<script type="text/javascript">

  function idea(varName, text)
  {
      this.varName = varName;
      this.ideatext = text;
      this.like = 0;
      this.str = "\
      <div class = 'entered'> \
          <div class = 'text'> " + this.ideatext + "</div> \
          <div class = 'anchors'> \
              <a href = '' onclick = '" + this.varName + ".increase()'> Approve </a> \
              <a href = '' onclick = '" + this.varName + ".decrease()'> Disapprove </a> \
          </div> \
      </div>";

      this.increase = function ()
      {
          this.like++;
          return false;
      }
      this.decrease = function ()
      {
          this.like--;
          return false;
      }
  }

  var wing = new idea("wing", "a wing is ...");
  var wheel = new idea("wheel", "a wheel is  ...");

</script>

そして、作成されたオブジェクトにはある種の集中型ストレージを使用します。多分このように:

  var brain = new Object();
  brain["wing"] = new idea("brain.wing", "a wing is ...");
  brain["wheel"] = new idea("brain.wheel", "a wheel is ...");
于 2013-02-11T14:22:41.240 に答える
0

onclick 属性を追加する代わりに、タグにクラスを指定します (この例では、クラスの増加と減少を使用しました)。次に、次のjqueryコードを追加します

$(document)
.on('click', '.increase', function() {
    alert('increase function');
});
.on('click', '.decrease', function() {
    alert('decrease function');
});
于 2013-02-11T12:45:36.320 に答える
0

document.createElementメソッドを使用して要素を作成できます。

var newDiv = document.createElement("div");

newDiv次に、要素をドキュメントに追加する前に変更します。

ここに関する詳細情報document.createElement: https://developer.mozilla.org/es/docs/DOM/document.createElement

于 2013-02-11T12:47:14.333 に答える