8

中にスパンを入れたliアイテムを作成しています。親 li の ID を取得して JSON get リクエストに渡す onclick 関数をスパンに作成しました。一意の ID を作成して JS 関数で読み取る方法がわかりません。これは動的に構築されるため、スイッチは構築しませんでしたが、別のオプションが欠けているように感じます。ここでの問題は、Li ID を取得できないことです。私はこれを試し、クラスに基づいて試しましたが、すべて失敗しているようです。

Li オブジェクトの作成:

$("#jdLists").append('<li class="bigger" id = "' + item.ID + '">'+ 
  item.GROUP_NAME + 
  '<span title="Remove from list" class=" Sp icon icon-color icon-plus" style="float: right; vertical-align: middle;" '+
  'onclick="spAdd()"></span>' + 
  '</li>');

オンクリック機能:

function spAdd() {
  $(this).closest("li").attr('id');
}
4

2 に答える 2

21

このようにしてみてください:

// Should work for most cases
function uniqId() {
  return Math.round(new Date().getTime() + (Math.random() * 100));
}

// Create elements properly and attach click event
// before appending to DOM so it delegates the event
var $li = $('<li/>', {
  'class': 'bigger',
  id: uniqId()
});

var $span = $('<span/>', {
  'class': 'Sp icon icon-color icon-plus',
  title: 'Remove from list',
  text: 'I\'m a span',
  click: function() { 
    alert( $(this).parent().attr('id') );
  }
});

$('#jsLists').append( $li.append( $span ) );

クリック時にliのランダムIDを警告する必要があります。また、インライン css の代わりに、それらのスタイルに別のクラスを追加します。より良く、よりシンプルに、より簡単に。

デモ: http://jsbin.com/avevim/1/edit (Ctrl+Enter で更新して新しい ID を取得)

于 2012-12-26T18:02:21.297 に答える
4

Underscore は、uniqueIdこのような場合に機能を提供します。日付と乱数を扱いにくくするのではなく、グローバル カウンターを保持し、関数が呼び出されるたびにインクリメントします。

var idCounter = 0;
_.uniqueId = function(prefix) {
  var id = '' + ++idCounter;
  return prefix ? prefix + id : id;
};
于 2012-12-26T18:32:42.660 に答える