while循环内部的函数
function inside while loop
我想做的是通过特定的按钮点击来获取特定textarea标签的内容,所以我认为循环可以解决这个问题。PHP上的while循环的作用是使文本区域的名称和按钮的onclick触发器不同。但是javascript中的循环不起作用。有人能帮我完成任务吗??抱歉英语不好。。。提前感谢
<html>
<head>
<script>
var i = 0;
while(i < 2000)
{
i++;
function feedbacks+i()
{
var feed = document.getElementsByName("feedback"+i)[0].value;
alert(feed);
}
}
</script>
</head>
<body>
<?php
while($i < 2000)
$i++;
echo "<textarea name='feedback$i' >you post</textarea>";
echo "<button onclick='feedbacks$i()' >send feedback</button>";
?>
</body>
</html>
我不确定我是否答对了你的问题,但为什么不写一个javascript函数并将索引作为参数传递呢?类似:
function feedbacks(index) {
var feed = document.getElementsByName("feedback"+index)[0].value;
alert(feed);
}
和
onclick='feedbacks($i)'
您的代码不正确,由于您已经用Jquery标记了您的问题,我想建议以下解决方案,
$(document).ready(function(){
$(document).on('click','button',function(){
alert($(this).prev('textarea').val())
});
});
您正在运行时创建这些元素textarea
和button
,因此必须使用委派来注册这些按钮的单击事件。此外,您必须将代码封装在.ready()
函数中,这意味着您必须在DOM准备好之后才能对其进行操作。
请参阅此处以获取参考资料,
- .on(代表团)
- .ready()
- .prve()
这里有两个主要问题。
命名您的函数
命名函数时,不能使用变量,只能使用单个标识符。
您可以使用一个函数表达式,然后在某种程度上分配结果,您可以用变量来标识该结果。例如
an_array_i_created_earlier[i] = function () {
// etc etc
}
关闭
您试图在正在创建的函数内部使用i
,但在该函数运行之前,您正在该函数外部对其进行更改。
你可以通过创建一个新的闭包来解决这个问题。
function createFunction(i) {
return function () {
// can use i sanely here because it was passed into a local variable belonging to `createFunction`
};
}
an_array_i_created_earlier[i] = createFunction(i);
不过这一切都很混乱。您可以忘记必须完全处理i
,并在处理时抛出可怕的内在事件属性
addEventListener('click', function (evt) {
var textarea, t = evt.target;
if (t.classList.contains('feedback')) {
textarea = t.previousElementSibling;
alert(textarea.value);
}
});
请注意,这使用了一些最近添加到浏览器DOM中的内容。如果您希望与旧浏览器(尤其是IE9和更早版本)兼容,那么您可能需要重写它,以添加对遗留方法的一些支持。像YUI或jQuery这样的库可以帮助实现这一点。
您的JavaScript代码中有一些错误:
function feedbacks+i()
是无效语法,请使用window['feedbacks' + i]
,如(1)所示- 循环中定义的函数将共享一些局部变量(闭包)。函数
feedbacks#{i}
中的变量将共享相同的i
。循环之后,i
变成了2001
,所有定义的函数都将尝试获得名为feedbacks2001
的文本区域,这当然不会起作用。您将需要(function (i) { /* the code using i */ })(i);
技巧来制作共享变量的本地副本
window
对象上定义函数,语法为window["feedbacks1"] = function () {}
我在jsFiddle上做了一个演示,纠正了错误。我只显示了2个文本区域。下面的javascript应该适用于2000文本区域的情况。
for (var i = 0; i <= 2; ++i) {
window["feedbacks" + i] = (function (i) {
return function (e) {
var feed = document.getElementsByName("feedback"+i)[0].value;
alert(feed);
};
})(i);
}
- 调用函数内部的函数
- javascript函数内部的代码用逗号而不是分号分隔
- javascript无法重新定义函数内部的全局对象
- 如何从函数内部的这个变量中获取值
- appendChild在函数外部工作,但在函数内部不工作
- 在jquery函数内部设置来自jquery函数的var;t运行
- 一个'var'在函数内部声明
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 函数内部未定义的输入值
- 在Meteor中如何将数据从函数内部复制到其他模板
- 如果在构造函数内部为else,则Javascript是可选的
- 我对“;返回true"嵌套函数内部;t工作
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- javascript,将参数传递给函数内部的闭包中的回调
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 使用PHP和Javascript在函数内部传递alphaneumeric值作为参数时出错
- 访问函数内部的Polymer方法
- 更改函数内部的全局变量而不调用它
- 如何在函数内部为jquery工具提示调用不同的var字符串
- 构造函数内部的事件处理