2017-04-14 55 views
0

我想创建一个屏幕键盘与jQuery的特定用户输入。 它适用于一个文本框,但是当我尝试将此代码用于多个输入时,它会在第一个输入中填充更多的值。 我的脚本识别第二个ID,但是我怎么说呢,它在第一个输入中填充了更多的值。有什么问题?jQuery屏幕键盘不同的输入字段

<input type="text" name="first" id="first" placeholder="0:00"onClick="showKeyboard(this)"/> 

function showKeyboard(inputbox){ 
    $('#keyboard').show(); 
    inputbox.value = ""; 
    alert(inputbox.id); 

    $('#keyboard .char').click(function() { 
     var charklicked = $(this).html(); 
     if(charklicked === "close"){ 
      $('#keyboard').hide(); 
      return false; 
     }else{ 
      inputbox.value = inputbox.value + charklicked; 
      return showKeyboard(); 
     } 
    }); 

    return false; 
} 

JSFiddle Demo

+0

每次调用'showKeyboard'您添加一个新的单击处理程序'#keyboard .char'时间,但他们仍然有旧的点击处理为好。 – Barmar

+0

好的,谢谢。但我该如何处理?我是一个jquery新手,我不知道。我认为“回报错误”消除事件。 – PasiB

+0

为什么你有递归调用'return showKeyboard();'?这是一个错误,因为'inputBox'是未定义的,所以'inputbox.value =“”;'失败。 – Barmar

回答

0

每次打开键盘时不绑定一个新的事件处理程序。设置一个指向当前输入框的全局变量,并将其用于单个事件处理程序中。

此外,而不是检查内容来检测“关闭”按钮,给它一个不同的类,并使用一个单独的处理程序。

var curInputBox = null; 
 

 
function showKeyboard(inputbox) { 
 
    $('#keyboard').show(); 
 
    inputbox.value = ""; 
 
    alert(inputbox.id); 
 
    curInputBox = inputbox; 
 
    return false; 
 
} 
 

 
$('#keyboard .char').click(function() { 
 
    if (!curInputBox) { 
 
    return; 
 
    } 
 
    var charklicked = $(this).html(); 
 
    curInputBox.value += charklicked; 
 
}); 
 

 
$('#keyboard .close').click(function() { 
 
    $('#keyboard').hide(); 
 
});
#keyboard { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
    display: none; 
 
} 
 

 
#keyboard li { 
 
    -moz-box-shadow: inset 0px 1px 0px 0px #ffffff; 
 
    -webkit-box-shadow: inset 0px 1px 0px 0px #ffffff; 
 
    box-shadow: inset 0px 1px 0px 0px #ffffff; 
 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ffffff), color-stop(1, #f6f6f6)); 
 
    background: -moz-linear-gradient(top, #ffffff 5%, #f6f6f6 100%); 
 
    background: -webkit-linear-gradient(top, #ffffff 5%, #f6f6f6 100%); 
 
    background: -o-linear-gradient(top, #ffffff 5%, #f6f6f6 100%); 
 
    background: -ms-linear-gradient(top, #ffffff 5%, #f6f6f6 100%); 
 
    background: linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%); 
 
    filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6', GradientType=0); 
 
    background-color: #ffffff; 
 
    -moz-border-radius: 6px; 
 
    -webkit-border-radius: 6px; 
 
    border-radius: 6px; 
 
    border: 1px solid #dcdcdc; 
 
    display: inline-block; 
 
    cursor: pointer; 
 
    color: #666666; 
 
    font-family: Arial; 
 
    font-size: 15px; 
 
    font-weight: bold; 
 
    padding: 6px 24px; 
 
    text-decoration: none; 
 
    text-shadow: 0px 1px 0px #ffffff; 
 
} 
 

 
#keyboard li:hover { 
 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f6f6f6), color-stop(1, #ffffff)); 
 
    background: -moz-linear-gradient(top, #f6f6f6 5%, #ffffff 100%); 
 
    background: -webkit-linear-gradient(top, #f6f6f6 5%, #ffffff 100%); 
 
    background: -o-linear-gradient(top, #f6f6f6 5%, #ffffff 100%); 
 
    background: -ms-linear-gradient(top, #f6f6f6 5%, #ffffff 100%); 
 
    background: linear-gradient(to bottom, #f6f6f6 5%, #ffffff 100%); 
 
    filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff', GradientType=0); 
 
    background-color: #f6f6f6; 
 
} 
 

 
#keyboard li:active { 
 
    position: relative; 
 
    top: 1px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
    <fieldset> 
 
    <legend>First</legend> 
 
    <input type="text" name="first" id="first" placeholder="0:00" onClick="showKeyboard(this)" /> 
 
    <legend>Second</legend> 
 
    <input type="text" name="second" id="second" placeholder="0:00" onClick="showKeyboard(this)" /> 
 

 
    </fieldset> 
 
</form> 
 

 
<ul id="keyboard"> 
 

 
    <li class="char">1</li> 
 
    <li class="char">2</li> 
 
    <li class="char">3</li> 
 

 
    <li class="char">4</li> 
 
    <li class="char">5</li> 
 
    <li class="char">6</li> 
 

 
    <li class="char">7</li> 
 
    <li class="char">8</li> 
 
    <li class="char">9</li> 
 

 
    <li class="char">-</li> 
 
    <li class="char">0</li> 
 
    <li class="char">:</li> 
 
    <li class="close">close</li> 
 
</ul>

+0

谢谢,这对我有效! – PasiB