如何克服函数嵌套
how do I overcome nesting in functions?
我是javascript和jquery的新手,并且遇到了一个问题,我还没有找到解决方案。我将尝试用一种相当简单的方式来描绘它。
我有一个页面为用户提供了一些选择(这是一款游戏,所以…),如攻击或防御,使用什么武器。然后加载两个html文件,每个都有一个"提交"按钮。提交按钮绑定到(单独的)函数,这些函数将数据传递给ajax。
我遇到的问题是我被嵌套函数所淹没。明白了吗?我的代码看起来像这样:
代码:$(function() {
$('#choice1').click(function() {
//do some stuff
});
$('#choice2').click(function() {
//do some stuff
});
$('#choice3').click(function() {
//do some stuff, including creating the choices below, and their submit boxes
$('#subChoice1').click(function() {
//send data with ajax to a php document. get result
//create some text on my document to display results
//create an input button, along with an id="subButton1"
});
$('#subChoice2').click(function() {
//send data with ajax to a php document. get result
//create some text on my document to display results
//create an input button, along with id="subButton1"
//(yes, feed both back to same func)
});
}); // end choice3
$('#subButton1').click(function() {
//my buttons in the subChoices do not call this function(!!??)
});
});
edit: link不再工作,抱歉。我在这里创建了一个活生生的例子。
谢谢你的任何提示或指示。我几乎可以肯定,只是有一些简单的东西,我错过了或没有意识到,这将使我走上正确的轨道。
您总是可以使用普通的命名函数而不是内联匿名函数。如果函数堆积如山,这可能会有所帮助。
更新:
这是你的工作案例1:
$('#button1').click(function(){
$('#div1').append('<span id="span1"><br>Alright. Button 1 worked. Here''s another button.</br></span>');
$('#div1').append('<input type="button" value = "Button 2" id="button2"/>')
$('#button2').click(function() {
$('#div1').append('<span id="span1"><br>Hey! Button 2 worked!. Let''s keep going.</br></span>');
$('#div1').append('<input type="button" value = "Button 3" id="button3"/>')
$('#button3').click(function() {
$('#div1').append('<span id="span1"><br>Hey! Button 3 worked!. That''s probably enough.</br></span>');
});
});
});
我的建议是这样更新它:
function button3_click() {
$('#div1').append('<span id="span1"><br>Hey! Button 3 worked!. That''s probably enough.</br></span>');
}
function button2_click() {
$('#div1').append('<span id="span1"><br>Hey! Button 2 worked!. Let''s keep going.</br></span>');
$('#div1').append('<input type="button" value = "Button 3" id="button3"/>');
$('#button3').click(button3_click);
}
function button1_click() {
$('#div1').append('<span id="span1"><br>Alright. Button 1 worked. Here''s another button.</br></span>');
$('#div1').append('<input type="button" value = "Button 2" id="button2"/>')
$('#button2').click(button2_click);
}
$('#button1').click(button1_click);
这样逻辑结构保持不变,但是可以取出嵌套的函数定义。
如果您一直重用类或id的提交按钮,您可以利用jQuery的live()
方法。它将允许您在父选项的单击处理程序之外为$('#subChoice1')
和$('#subChoice2')
创建绑定,但在创建时仍然将它们正确绑定。
相关文章:
- 用嵌套函数和默认函数定义函数
- d3中堆栈函数和嵌套函数之间的差异
- JavaScript 中的嵌套函数和 “this” 关键字
- 嵌套到另一个函数中的Fancybox函数;不起作用
- Javascript中带有返回值的嵌套函数
- 访问嵌套函数结构中的JavaScript父函数变量
- 从嵌套函数访问函数属性
- 如何在javascript中使用嵌套函数作为生成器(使用“inner”yields)
- Javascript嵌套函数属性继承
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- Facebook Javascript 函数嵌套循环
- 将动态 AJAX 函数嵌套在 JavaScript 函数中 - 并保持更新
- 对由多个groupBy函数嵌套的对象数组进行分组
- 从父函数返回什么以获取从子函数/嵌套函数返回的值
- jQuery匿名函数-嵌套函数
- ajax调用函数嵌套
- 函数嵌套括号的Python风格指南是什么?
- setTimeout函数中的关键字,该函数嵌套在on()方法下.但这并没有奏效
- 嵌套异步函数嵌套同步函数
- 如何克服函数嵌套