順不同リストがあります:
<ul id="sortable">
<li id="1" class="ui-state-default">First <a href='#' title='delete' class="itemDelete">x</a></li>
<li id="2" class="ui-state-default">Second <a href='#' title='delete' class="itemDelete">x</a></li>
<li id="3" class="ui-state-default">Third <a href='#' title='delete' class="itemDelete">x</a></li>
</ul>
<li>
から<ul>
を削除したい。削除しようとするクラスitemDeleteのクリックイベントを処理しましたが、子が呼び出しているときに<li>
を削除できないため、機能していないと思いますか?
$('.itemDelete').live("click", function() {
var id = $(this).parent().get(0).id;
$("#" + id).remove();
});
最善のアプローチは何ですか?
JQueryの最新バージョンを使用していると仮定します。
$('#sortable').on('click', '.itemDelete', function() {
$(this).closest('li').remove();
});
closest
はparent
よりも少し動的です(parent
はここでも機能します)。現在の要素に最も近いli
を取得します。構造内。
実際、現在のところ、id
は未定義になります。liにはIDがないためです。
なぜしないのですか
$(this).parent().remove()
また、falseを返すことを忘れないでください。
<li>
sにIDがありません
単純にどうですか
$(this).parent().remove();
私にとってうまくいったこと:id属性の前に文字列またはアンダースコアを付ける(他の人が指摘したように)
JQuery Mobileのようなフレームワークでは、IDがすべてのページで一意である必要があるため(1ページだけでなく、ページ名、アンダースコア、データベースのレコードにアクセスできる数値IDをプレフィックスとして付けます。
クラスまたはulコントロールにバインドする代わりに、「on」を使用して親リストのliにバインドします。
$('#sortable').on('dblclick', 'li' function() {
aval = $(this).attr('id').match(/\d+/g); // only want the numbers...
id = aval[0];
name = $(this).text(); // in case you need these for a post...
li = $(this); // so we can remove it from the list after the 'this' object changes inside the ajax call...
// make an ajax call to the server
var jqxhr = $.post( "somepage.php", {name: name, id: id},
function(data) {
li.remove();
$("#sortable").listview("refresh");
},'json').fail(function() { alert("error"); });
return false; // preventDefault doesn't seem to work as well...
});