[英]add event for sub children in jquery
在這里用jquery給我一點幫助。 這是我的問題。 我有一份清單
<ul>
<li>
<p>Name</p>
<a href="#">Delete</a>
</li>
</ul>
加載頁面時,“刪除”事件單擊是在jquery中啟動的。 所以現在問題,我想添加一個元素<li></li>
,其中包含上面的子項。 我使用jquery創建標簽'li'包含子項,然后'prepend'到'ul'。 問題是,我不能在新項目上調用'刪除'事件。 請有人幫幫我
問題是你最有可能使用.click或bind('click')將click事件處理程序附加到元素。 如果在附加事件時存在所有元素,那么這很好,如果您創建與該相同選擇器匹配的新元素,則它們不會附加該事件。
您需要使用delegate()或.on()方法將事件附加到頁面上當前的所有元素,或者在設置后附加到頁面。
捕獲click事件並附加新元素的委托示例,您可以單擊該元素並查看相同事件是否附加到與選擇器匹配的DOM的每個新部分。
$('#list').delegate('a','click',function() {
alert('Click event fired - Adding a new element to test!');
$('ul').append('<li><p>Name</p><a href="#">Delete</a></li>');
return false;
});
或者使用較新的.on方法:
$('#list').on('click','a',function() {
alert('Click event fired - Adding a new element to test!');
$('ul').append('<li><p>Name</p><a href="#">Delete</a></li>');
return false;
});
$('#list')
是我的例子用來表示<ul>
,但如果你不想在列表中放置id或類,你可以很容易地使用$('ul')
。
試試這個DEMO
var contentToAdd = ' <li> <p>Name</p> <a href="#">Delete</a> </li>';
$('ul').prepend(contentToAdd);
$('ul').on('click','a', function(){
alert('click');
});
看看這個jQuery示例:
( http://api.jquery.com/on/上的最后一個例子之一)
<!DOCTYPE html>
<html>
<head>
<style>
p { background:yellow; font-weight:bold; cursor:pointer;
padding:5px; }
p.over { background: #ccc; }
span { color:red; }
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<p>Click me!</p>
<span></span>
<script>
var count = 0;
$("body").on("click", "p", function(){
$(this).after("<p>Another paragraph! "+(++count)+"</p>");
});
</script>
</body>
</html>
這意味着在你的情況下你需要這樣的東西:
$("ul").on("click", "a", function(e){
// delete logic goes here
})
在UL上添加點擊監聽器而不是a本身。 這樣,它也會自動檢測新添加項目的點擊次數。
$(document).ready(function() {
$("ul").on("click li > a", function() {
$(this).closest("li").remove();
});
});
好的,鑒於“.on”不符合您的要求,可能是這樣的:
$element = $('<li><p>Name</p><a href="#">Delete</a></li>');
$element.find("a").click(function(){
//call your delete function
})
$("ul").prepend($element);
你可以試試這個,
$("ul").on("click", "a", function(e){
e.preventDefault();
$(this).closest('li').remove();
});
Why dont you use jquery templating.
You can define a text/template and iterate over it to get your desired result.
an example:
**THIS IS YOUR SCRIPT**
<script id="movieTemplate" type="text/x-jquery-tmpl">
<li><b>${Name}</b> was released in ${ReleaseYear}.</li>
</script>
**THIS IS THE JQUERY TEMPLATE**
<script type="text/javascript">
var movies = [
{ Name: "The Red Violin", ReleaseYear: "1998" },
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
{ Name: "The Inheritance", ReleaseYear: "1976" }
];
// Render the template with the movies data and insert
// the rendered HTML under the "movieList" element
$( "#movieTemplate" ).tmpl( movies )
.appendTo( "#movieList" );
</script>
**THIS IS YOUR HTML**
<ul id="movieList"></ul>
更多示例: http : //blog.reybango.com/2010/07/09/not-using-jquery-javascript-templates-youre-really-missing-out/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.