jquery获取循环输出的对象

来源:互联网 发布:金山数据恢复下载 编辑:程序博客网 时间:2024/05/21 18:28

为了完成毕业设计,最近有留意到前端的一些技术,从最简单的JavaScript到ajax或者jquery,发现也不是简单的是,不过也是对于后端的另外一种体验。今天来说说困扰了我近2周的一个小问题,当我得知答案的时候,(我完全不敢说话)。


jquery如何获取循环输出的对象?


我们都知道,对于html的标签,都是在客户端即时解析的,我们平时改前端的代码也十分简单,只需要build一下然后刷新就好了;对于s标签,它是在服务器端输出结果的,是无法即时改变的,也无法用JavaScript或者jquery来获取他们的对象,而在MVC的模式下,不可能把数据处理放在jsp页面上处理,所以我们要怎么做呢?


关键在于EL表达式$().live()


先看看EL表达式的解释,我查的是清华大学出版社的《javaEE大学教程》,里面对EL表达式的解释是EL表达式,英文为Expression language,即表达式语言,它是为了便于存取数据而定义的一种语言,在JSP2.0之后才成为一种标准。EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能。有EL表达式语言后,就可以直接使用EL进行输出,减少脚本对HTML的嵌套了。


比如:$(name)的意思是读出某一范围中名称为name的变量。因为没有指定哪一个范围的name,所以它会依序从page、request、session、application范围查找。要取得session中的值得话,可以$(name)或者$(sessionScope.name)。除了sessionScope,还有pageScope、requestScope、applicationScope。



再看看$().live(),live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。


举个例子,当点击class为recommentBtn的按钮时,会触发把名字传到ID为Ccontent的输入框中:

$('.recommentBtn').live('click', function(){  

var recommentName=$(this).attr('name');
$('#Ccontent').html("回复"+recommentName+": ");
});

可能会有人问,这和.click()有什么不同啊,我也可以

$('.recommentBtn').click( 
function(){
var recommentName=$(this).attr('name');
$('#Ccontent').html("回复"+recommentName+": ");

});


This is the point!


这两者的区别就是:

live方法绑定的事件处理函数,在页面中未来添加的元素只要满足原来的选择器,仍然会导致事件触发。普通的事件绑定则没有这个效果
对于#btn这个选择器来说,如果你未来将id为btn的元素删除,然后再创建一个id为btn的元素,若你在页面中点击这个新创建的元素,使用$('#btn').click绑定的函数将不会被触发,但使用$("#btn").live("click",...绑定的函数会被触发。
意思就是,对于<s:iterator>这种在服务器端输出的标签,是一种新的元素,用.click()方法就无法绑定该元素了。所以我们要这样实现:
action:
里面的pageBean和list是我已经封装好的一个分页功能,详情可以翻查我的博客。至于需不需要一定放在request里面才能实现这个效果,答案是否定的。只不过这是我解决方法时候的一些方案而已,只放在list里面跳转到评论页面也就可以了。

jsp:


这是在jsp中的输出的一个table,用s标签输出了刚刚放在request中的数据,里面button里面的name就是我们需要提取的数据。


这里是对话框,我们需要把name的值放在Ccontent里面



jquery:


就是这样,为recommentBtn类实时绑定点击事件,将这里面的name属性传给Ccontent里面。



实现效果:


点击回复:


1 0