如何仅在字段中的第一个keyup上创建keyup()函数

时间:2012-02-09 11:00:50

标签: javascript jquery-ui jquery

我已经创建了一个代码在这里的keyup()函数

$(document).ready(function() {
    var scntDiv = $('#add_words');
    var wordscount = 1;
    $(document).keyup(function(e) {

        var key = (e.keyCode ? e.keyCode : e.which);
        if (key === 32) {
            wordscount++;
            $('.input1').append('<p>stop touching your keyboard</p>');
            $('<div class="line">Word ' + wordscount + '<input type="text" class="input' + wordscount + '" value="' + wordscount + '" /><a class="remScnt">Remove</a></div>').appendTo(scntDiv);
            i++
            return false;
        }
    });
});

<div id="add_words">
    <div class="line">Word 1<input class="input1" type="text" value="1" /></div>
</div>

工作正常,但每当我按空格键添加新的输入字段。 问题是我无法用空格键入长单词(来自很多输入字段)

例如: - 当键入&#34;我的你好世界&#34;显示两个输入字段。实际上我需要一个额外的字段。

我的问题是,是否有任何选项keyup()功能仅在第一次在同一个字段中工作

如果你知道可以帮助我吗

6 个答案:

答案 0 :(得分:5)

首次使用后,您可以使用一种方法自动取消绑定事件:

$("#foo").one("keyup", function() {
  alert("This will be displayed only once.");
});

答案 1 :(得分:3)

您可以使用 jQuery .one()

$('#myinput').one('keyup',function(){
 // do something
});

答案 2 :(得分:2)

我不确定你到底想要什么,但试试这个......

使用HTML5 data.*了解之前使用过该空间的用户。

$(document).ready(function() {
    var scntDiv = $('#add_words');
    var wordscount = 1;
    $(document).keyup(function(e) {

        var key = (e.keyCode ? e.keyCode : e.which);
        if (key === 32 && $(e.target).data('added')) {  // <=== Here
            $(e.target).data('added', 'added');        // <===  And Here
            wordscount++;
            $('.input1').append('<p>stop touching your keyboard</p>');
            $('<div class="line">Word ' + wordscount + '<input type="text" class="input' + wordscount + '" value="' + wordscount + '" /><a class="remScnt">Remove</a></div>').appendTo(scntDiv);
            i++
            return false;
        }
    });
});

答案 3 :(得分:2)

我认为这就是你搜索的内容

$(document).ready(function() {
    var scntDiv = $('#add_words');
    var wordscount = 1;
$("#add_words").on("keyup","input[type='text']",function(e) { // Set the eventhandler to the inputs

        var key = (e.keyCode ? e.keyCode : e.which);
        if (key === 32) {
            if($(this).attr("data-isused")!="true"){ // Check if THIS textbox have append a new textbox?
            $(this).attr("data-isused","true"); // Mark that this textbox has append a new one
            wordscount++;
            $('.input1').append('<p>stop touching your keyboard</p>');
            $('<div class="line">Word ' + wordscount + '<input type="text"     class="input' + wordscount + '" value="' + wordscount + '" /><a class="remScnt">Remove</a>    </div>').appendTo(scntDiv);
        //i++ Ignore this, couse its not declared
        return false;
        }
    }
});

});

的jsfiddle: http://jsfiddle.net/pURVS/

答案 4 :(得分:1)

不,但您可以将类添加到目标输入字段并测试它是否已经在此处,然后不执行任何操作

答案 5 :(得分:1)

您应该使用bind和unbind方法:

http://api.jquery.com/bind/ http://api.jquery.com/unbind/

例如:

var handler = function() {   
  alert('The quick brown fox jumps over the lazy dog.'); 
  // unbind handler so the function is not executed again
  $('#foo').unbind('click', handler);
}; 
$('#foo').bind('click', handler); 

在你的处理函数中,如果你不再希望它被执行(在第一次按键之后),你可以调用unbind方法。