目标是,当我专注于最后一个文本行时,另一个文本行出现在它下面。然后在一定数量的行中禁用它。 我似乎无法弄清楚这里有什么问题:
$(document).ready(function() {
lineCount = 0;
$("form#qc").delegate("input:text:last-child", "focus", newTextLine);
});
function newTextLine() {
newLine = ("<div id='ansInput{0}'>Answer {0}: <input type='text' name='ans1' /></div><!--ans1-->").format(lineCount);
currentDiv = ("#ansInput{0}").format(lineCount);
$(currentDiv).after(newLine);
lineCount = lineCount++;
}
这是HTML页面:
<form id="qc" name="qc">
<h2>Create New Question!</h2>
<div id="ansInput0">Question: <input type="text" name="Question" /></div><!--question-->
<input type="submit" value="Submit" />
</form>
我得到一个非常非常令人满意的结果:每次出现两行,并且所有行都有0
的索引,并且都响应事件处理程序,假设它只适用于最后一行...
任何想法代码有什么问题?
欢迎任何有关如何使代码更智能的建议!
答案 0 :(得分:1)
如上所述,您的代码中存在一些问题。 我试试这样: 克隆最后一个div,更改id并清除输入值:
$(function() {
$("#qc>div:last-of-type>input").live('focus', function() {
$(this).parent().after($(this).parent().clone().attr('id', 'ansInput' + $('#qc>div').length).find('input').val('').end());
});
});
我希望这不会太混乱! :)
答案 1 :(得分:0)
我在这看到几个问题。首先,根据您提供的代码,我没有看到您的lineCount变量的范围。其次,仅仅因为你正在为你正在创建的新元素添加一个事件处理程序,并不意味着你要从旧元素中删除它。