在按键,动态添加标签?

时间:2015-11-22 18:43:40

标签: javascript jquery

我对这段代码有些麻烦。

    $('body').on("keypress", ".message", function(e) {
      if ( e.keyCode == 13 && $(".message").val().length > 0 ) {

          input = $(".message");
          // Check for join command.
          if (input.val().substr(0, 5) == "/join") {

            // Get channel
            channel = input.val().substr(7, input.val().length);

            // APPEND NEW TAB
            $("ul.nav-tabs li").after('<li><a href="#' + channel + '" aria-controls="#' + channel + '" role="tab" data-toggle="tab">#' + channel + '</li>');
            $('.tab-content').append('<li class="tab-pane log" role="tab-pane" id="' + channel + '" data-channel="' + channel + '"><div class="Topic">Hej och välkommen till #' + channel + '.</div><ul class="Messages"></ul><input type="text" name="message" id="message" autocomplete="off" class="message sendValue"></li>');
            $(".nav-tabs li").children('a').last().click();
          }


          log('<strong>Du</strong>: ' + input.val());
          send( input.val() );

          $(".message").val('');
        }
      });

按键事件对动态添加的输入没有反应,我读了一些关于在添加后添加on事件的内容,因为这个代码在加载dom时运行。

所以我的问题是:我怎样才能使动态输入工作呢?

1 个答案:

答案 0 :(得分:1)

您已经在使用DriveId,所以我认为它运作正常,您的真正问题是:

.on

您需要更改为:

input = $(".message");

否则,即使页面上有多个输入,您也将始终处理第一个输入。您还可以使用var input = $(this); 来更轻松地调试这些问题。例如,如果添加:

inspect element > console

到你的脚本,你会看到事件处理程序工作正常,你的问题进一步发展。

(也将$('body').on("keypress", ".message", function(e) { console.log(e); 更改为$(".message").val('');