将键eventlistener添加到上一个生成的输入字段,并在键入后将其停止

时间:2015-04-14 15:13:33

标签: append keypress stoppropagation

当我点击一个按钮时,我的dom中会生成一个非特定数量的输入字段,加上一个空输入字段。

我想在最后生成的空输入字段中添加类似按键事件的内容。

当我开始输入时,在最后一个空输入字段中,应附加另一个输入字段。这个新的附加输入字段应该得到keypress eventlistener,我所在的输入字段应该松开keypress eventlistener。

我是这样做的(编辑:添加为代码段):

$(document.body).on("input", ".service-input:last", function (e) {
    var lastInput = $(".elementCtr.input-ctr input").last(),
            inputID = (parseInt(lastInput.attr('name')) + 1);
    $("#providerServicesForm .inputs").append('<div class="elementCtr input-ctr"><input id="service_' + inputID + '" type="text" value="" name="' + inputID + '"></div>');
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<form accept-charset="UTF-8" name="providerServicesForm" id="providerServicesForm" method="post">
  <div class="inputs">
    <div class="elementCtr input-ctr"><input type="text" name="1" value="test1" id="service_1" class="service-input"></div>
    <div class="elementCtr input-ctr"><input type="text" name="2" value="test2" id="service_2" class="service-input"></div>
    <div class="elementCtr input-ctr"><input type="text" name="3" value="test3" id="service_3" class="service-input"></div>
    <div class="elementCtr input-ctr"><input type="text" name="3" value="" id="service_3" class="service-input"></div
  </div>
</form>

到目前为止,此工作正常。 但是我当然希望只有第一次按键才会发生这种情况。

  1. 按键后,应停止添加文本字段。但是当我在新添加的(最后一个)文本字段中键入内容时,它应该再次添加文本字段。但是按下键后只有1个Textfield ......

  2. 输入后我无法停止eventlistener。

  3. Keypress是否适用于移动设备?

2 个答案:

答案 0 :(得分:0)

如果你只希望它发生一次,为什么不创建一个计数器并将其设置为0.发生之后,你可以将计数器增加到1.

var counter=0;

$(document.body).on("keypress", $(".elementCtr.input-ctr input").last(), function () {
    if(counter==0){

        //put your logic here

        counter++;
    }
})

答案 1 :(得分:0)

关于这种处理程序的好处是,如果使用新的最后一个元素更新DOM,处理程序会立即切换到新元素 - 不需要使用.off.one。 / p>

&#13;
&#13;
$(document.body).on("input", ".service-input:last", function () {
    var inputID = (parseInt($(this).attr('name')) + 1);
    $("#providerServicesForm .inputs").append('<div class="elementCtr input-ctr"><input id="service_' + inputID + '" class="service-input" type="text" value="" name="' + inputID + '"></div>');
  });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<form accept-charset="UTF-8" name="providerServicesForm" id="providerServicesForm" method="post">
  <div class="inputs">
    <div class="elementCtr">
      <input id="service_0" type="text" class="service-input" value="" name="0">
    </div>
    <div class="elementCtr">
      <input id="service_1" type="text" class="service-input" value="" name="1">
    </div>
    <div class="elementCtr">
      <input id="service_2" type="text" class="service-input" value="" name="2">
    </div>
  </div>
</form>
&#13;
&#13;
&#13;

一种可能的增强方法是检测空字符串并删除新添加的输入。