2012-02-09 2 views
1

Я создал KeyUp() код здеськак сделать KeyUp() функцию только на первом 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> 

, который работает нормально, но когда я нажимаю пробел, добавив новое поле ввода. проблема в том, что я не смог бы набирать длинные слова с пространством (приходящее много поля ввода)

например: - когда тип «мой мир привет» показывает два поля ввода. На самом деле мне нужно еще одно поле.

мой вопрос заключается в том, что есть ли какая-либо параметр keyup() функция работает только в первый раз в том же поле

Если вы знаете, могли бы вы помочь мне, пожалуйста

+1

ли я вас правильно понял: Проблема заключается в том, что, когда вы набираете «привет мир», это возможно. Но вы не хотите добавлять новый вход? –

+3

* «Проблема в том, что я не смог бы слова с пространством (приходящее много поля ввода)» * - дислексия? –

+2

прошу немного усилий с вашим английским! :) В противном случае не легко быть уверенным в том, что вы точно хотите ... – Stefano

ответ

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; 
     } 
    } 
}); 

});

JS Fiddle: http://jsfiddle.net/pURVS/

+0

точно брат @Simon Edström :). Большое спасибо за вашу помощь. извините за непонимание моего английского языка – Muhammed

1

нет, но вы можете добавить класс к целевому полю ввода и тест если он уже здесь, то ничего не делать

+2

HTML5 data- * лучше, чем класс. – gdoron

+0

хорошее предложение +1 –

+0

@ smoula22 Я строил словарь малаялам. Этот параметр дает возможность добавлять новые слова в словарь.когда кто-то набирает слово, тогда появится новое текстовое поле. но здесь он показывает много текстовых полей, потому что у некоторых слов много места :( – Muhammed

1

Вы должны использовать привязку и 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 метод.

5

Вы можете использовать один метод для автоматического отвязать событие после первого использования:

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

вы можете использовать jQuery .one()

$('#myinput').one('keyup',function(){ 
// do something 
}); 
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; 
     } 
    }); 
}); 
+0

Что значит 'добавлено'? – Muhammed

+2

@ maanu это в значительной степени идентично ответу Саймона (но написан на час раньше ;-)), используя html5-данные api. 'data ('added')' == 'attr ('data-added')' so 'added' совпадает с' isused' в ответе Саймона! – Stefano

+0

@Stefano. Спасибо ... +1 – gdoron

Смежные вопросы