React中,map出来的元素添加事件无法使用

在使用react中,经常用到react的map函数,用法和jquery里中的map一样,但是,如果你在每个map出来的元素中添加,你会发觉添加的事件无法关联,

比如,我们很多的评论,我需要在每个评论下面加一个回复的input,input期初是隐藏的,当我点击每天评论下面的回复时,input输入框显示

这里举个例子,比如我数组里有三组文字,我把它们渲染到li中,点击每个li,alert()出每个li里面的内容,按照下面的方法,你会发觉出错,无法显示

var myTest = React.createClass({ 

	handleChange: function(item) {
		console.log(item);
	},
    render: function () {
	var showArry = [‘hello1‘, ‘hello2‘, ‘hello3‘]; 

	return (
		<ul>
			{
				showArry.map(function (item) { 

					return 	<li onClick={this.handleChange.bind(this.item)}>{item}</li>;

				})
			}
		</ul>
	); 

});
React.render(<myTest/>, document.body);

  

正确的方法是,不要在map的时候进行return。而是先将map的结果保存到一个变量,比如我们可以把它们保存在一个数组里,然后我return这个数组。这样就可以达到我们的效果了,代码如下:

var myTest = React.createClass({ 

	handleChange: function(item) {
		console.log(item);
	},
    render: function () {
	var showArry = [‘hello1‘, ‘hello2‘, ‘hello3‘];
	var newArry=[];
	for(var i=0;i<showArry.length;i++){
		var item=showArry[i];
		return newArry.push(<li onClick={this.handleChange.bind(this.item)}>{item}</li>)
	}

	return (
		<ul>
			{newArry}
		</ul>
	); 

});
React.render(<myTest/>, document.body);

  

时间: 2024-10-08 13:41:28

React中,map出来的元素添加事件无法使用的相关文章

通过原生JS实现为元素添加事件

自己写了一个为元素添加事件的方法,并封装到对象中. 说明: id : 目标元素的ID type: 事件的类型,注意的是不能加on fn:事件处理程序 isBubble :规定事件流 代码: var bindEvent = { 'add':function(id,type,fn,isBubble){ var dom = document.getElementById(id); if(!isBubble) isBubble=false; if(dom.addEventListenner){ dom.

给Jquery动态添加的元素添加事件

给Jquery动态添加的元素添加事件 我想很多人都会向我一样曾经 被新元素的事件绑定困惑很久也就是在页面加载完成后给元素绑定了事件,但又新增加的元素上却没有绑定任何事件. js的事件监听跟css不一样,css只要设定好了样式,不论是原来就有的还是新添加的,都有一样的表现.而事件监听不是,你必须给每一个元素单独绑定事件. 常见的例子是处理表格的时候.每行行末有个删除按钮,点了这个能够删除这一行. <table>    <tbody>        <tr>        

[转载]给Jquery动态添加的元素添加事件

原文地址:给Jquery动态添加的元素添加事件作者:小飞侠 我想很多人都会向我一样曾经 被新元素的事件绑定困惑很久也就是在页面加载完成后给元素绑定了事件,但又新增加的元素上却没有绑定任何事件. js的事件监听跟css不一样,css只要设定好了样式,不论是原来就有的还是新添加的,都有一样的表现.而事件监听不是,你必须给每一个元素单独绑定事件. 常见的例子是处理表格的时候.每行行末有个删除按钮,点了这个能够删除这一行. <table> <tbody> <tr> <td

jquery为新增元素添加事件

jquery为新增元素添加事件 默认情况,你使用jquery新增一个元素 ,用class的方法无法绑定事件,需要将绑定的函数放到jquery外面 然后在绑定行内事件 这样就可以绑定了

jQuery 中 on 方法-----给未来元素添加事件

<li class='clear dir-li'> <div class='left title'> 添加到目录:</div> <div class='left item' id='dir-ctrl-dv'> <if condition="$dirs neq ''"> <select act-v='1' act="{:U('Content/getDirs')}" class='input dir-ct

给DOM元素添加事件

今天遇到一个问题:鼠标单击页面中的任意标签,弹出该标签的名称. 实现代码如下: <script type="text/javascript"> document.onclick = function(e){ var e = (e||event); var o = e["target"] || e["srcElement"]; alert(o.tagName.toLowerCase()); } </script> 即创建了一

给Jquery动态添加的元素添加事件2

jquery为动态添加元素添加事件 还有这里:http://www.cnblogs.com/dumuqiao/archive/2011/09/09/2172511.html Event names and namespaces(事件名称和命名空间) http://www.css88.com/jqapi-1.9/on/ 任何事件的名称,可以作为events 参数.jQuery将通过所有浏览器的标准JavaScript事件类型,当用户操作事件,如click,浏览器会调用handler参数的函数.此外

JQ 为未来元素添加事件处理器—事件委托

随着DOM结构的复杂化和Ajax等动态脚本技术的运用,有了较多的动态添加进来的元素,直接用JQ添加click事件会发现新添加进来的元素并不能直接选取到,在这里就需要用到事件委托方法,JQ为事件委托提供了live().dalegate()和on()方法. 事件委托 我们知道,DOM在为页面中的每个元素分派事件时,相应的元素一般都在事件冒泡阶段处理事件.在类似 body > div > a 这样的结构中,如果单击a元素,click事件会从a一直冒泡到div和body(即document对象).因此

关于动态生成的行内元素添加事件问题

平时工作中会遇到动态给某个div加子元素,有时候为了简便,直接如下写法: var oBox = document.getElementById('box'); oBox .innerHTML = '<button onclick="change();">子元素</button>'; 还顺便给子元素添加了一个点击事件,但发现当我们再外面定义了change函数之后,点击按钮报错,change is not defined!可想而知,这种动态添加子元素的方法是无法添加