在动态生成列表项时遇到 jQuery 的问题
getting stuck with jquery in generating list items dynamically
这是脚本:
<script type="text/javascript">
var classname="";
$(document).ready(function(){
$("#submit").click(function(){
name=$("input#name").val();
$("#listview").append("<li>"+name+"</li>");
$('#listview').attr('class','item');
});
$("li.item").click(function(){
$(li.item).removeClass("selected");
$(this).addClass
});
});
</script>
<style type="text/css">
.selected { background-color:red;width:20px;}
</style>
这是 html 代码:
<ul id="listview" >
data
</ul>
使用上面的代码,我能够动态生成无序列表项。但是我无法在动态类的帮助下将 css 类添加到动态列表项(类用于
试试这个:
var classname="";
$(document).ready(function(){
$("#submit").click(function(){
name=$("input#name").val();
$("#listview").append("<li class='item'>"+name+"</li>");
});
$("li.item").click(function(){
$("li.item").removeClass("selected");
$(this).addClass("selected");
});
});
</script>
这是你想做的吗?
http://jsfiddle.net/Wd887/3/
每次添加新列表项时,都需要应用单击事件。否则jQuery不会依赖于该特定项目的事件。
$(document).ready(function(){
var clickEventHandler = function(){
//remove class from previously clicked elements.
$(".selected").removeClass("selected");
//add it to the current element.
$(this).addClass("selected");
}
$("#submit").click(function(){
var name=$("input#name").val(),
ul = $("#listview");
//generate li with jquery add a click handler to it.
$("<li/>", {'class': "mc" })
.appendTo(ul)
.click(clickEventHandler);
});
});
您需要
将事件附加到动态创建的列表项,而不是直接使用 .bind()
定义那里的单击事件:
$("li.item").bind("click", function(event){
event.preventDefault();
$(li.item).removeClass("selected");
$(this).addClass("otherclass");
});
根据我从你的帖子中能够感知到的 你可以尝试以下代码来实现你想要的
$(document).ready(function(){
$("#submit").click(function(e){
// if #submit is a submit button then You have to prevent
// the default behavior or page will reload
// you can do that by uncommenting following line
// e.preventDefault();
name=$("input#name").val();
$("#listview").append("<li class='item'>"+name+"</li>");
});
$("ul#listview").on('click','li.item',function(){
$('li.item').removeClass("selected");
$(this).addClass('selected');
});
});
现有代码的问题:
您正在执行
$('#listview').attr('class','item');
,这会将类添加到ul
而不是新创建的li
由于
li
元素已动态添加到 DOM 中,因此简单地将事件与.click()
绑定click
不起作用,您必须使用事件委托,建议使用.on()
方法来执行此操作。$(this).addClass
什么都不做,也许你打算写$(this).addClass('selected');
相关文章:
- 将PHP变量传递给jQuery时遇到问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- 将jQuery转换为用户脚本的普通Javascript时遇到问题
- JQuery FullCalendar在从ajax成功调用rerenderEvents时遇到问题
- 使用jquery进行整数比较时遇到问题
- 通过jQuery获取上传的文件名时遇到问题
- 我在向jquery脚本添加延迟时遇到问题
- jQuery-即使条件不是't遇到
- 使用jquery删除和获取html元素时遇到问题
- 从javascript或JQuery执行服务器端cgi代码时遇到问题
- jquery动态添加HTML字段遇到了神秘的问题
- 在 scrollTop 上应用 Jquery 效果时遇到问题
- 编写正确的 jQuery 插件时遇到麻烦
- 在动态生成列表项时遇到 jQuery 的问题
- jQuery 注册 2 个键事件侦听器时遇到问题
- 使用 jquery 读出 json 时遇到问题
- 通过 jquery 侦听器将 html 表单链接到 javascript 函数时遇到问题
- 在 ajax-jquery 函数中传递参数时遇到困难
- JQuery 手风琴在添加内容和对齐时遇到问题
- 遇到Jquery事件的麻烦.与其他jquery代码一起拖动