2016-09-06 7 views
3

При удалении заданного символа из события ввода keyup срабатывает дважды. Как я могу это предотвратить?Как я могу предотвратить событие keyup дважды срабатывает при удалении символа из ввода?

HTML

<input type="text" id="search"> 

JS

var block = { 
    'ch1': { 
     'key':'/', 
     'keycode':'191' 
    }, 
    'ch2': { 
     'key':':', 
     'keycode':'186' 
    }, 
    'ch3': { 
     'key':'=', 
     'keycode':'187' 
    } 
} 

$('#search').on('keyup',function(){ 
    console.log(checkChar($(this))); 
}); 

function checkChar($this){ 

    var txt = $this.val(), 
     flag = true; 

    for(var i=0; i<txt.length; i++) { 

    $.each(block,function(k,v){ 

     if (txt[i] === v.key) { 
     $this.val(txt.slice(0,-1)); 
     flag = false; 
     return false; 
     } 

    }); 

    } 

    return flag; 

} 

JSBIN

https://jsbin.com/mirocepiqo/1/edit?html,js,output

+2

Проблема заключается в том, что, когда вы отпустите кнопку переключения, KeyUp генерируется событие, а также. Попробуйте отфильтровать для интересующих вас ключей. –

ответ

2

Pass event функционировать, проверьте event.shiftKey, если условие true, return

$('#search').on('keyup',function(e){ 
    var res = checkChar(e, $(this)); 
    if (res !== undefined) { 
    console.log(res); 
    }; 

}); 

function checkChar(e, $this){ 
    if (e.shiftKey) { 
    return 
    }; 
    var txt = $this.val(), 
     flag = true; 

    for(var i=0; i<txt.length; i++) { 

    $.each(block,function(k,v){ 

     if (txt[i] === v.key) { 
     $this.val(txt.slice(0,-1)); 
     flag = false; 
     return false; 
     } 

    }); 

    } 

    return flag; 


} 
+0

Это именно то, что я хотел. спасибо – midstack

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

  • Нет связанных вопросов^_^