在OnClientKeyPressing
的{{1}}事件中,
我正在检查RadComboBox
中输入的文本是否大于5个字符,
然后启用 RadComboBox
,如果没有,则禁用 asp:Button
。
asp:Button
和RadComboBox
都在asp:Button
内。
如果我手动输入5个或5个以上的字符,这很有效,
但如果我在RadGrid
内有5个或5个以上的字符,如果我粘贴,那么RadComboBox
仍然是禁用的。
原因是:当我在asp:Button
,RadComboBox
事件加注中粘贴某些内容并且由于只按下了一次键(ctrl + v),因此长度为text始终为0并且根据条件(如果长度<3,禁用按钮),它将保持禁用状态
请注意,长度从0开始,而不是从1开始。
我知道原因但我不知道如何在OnClientKeyPressing
以下是Javascript到现在为止:
RadComboBox
HTML:
<telerik:RadCodeBlock ID="rcb" runat="server">
<script type="text/javascript">
function HandleKeyPress(sender, eventArgs) {
var len = sender.get_text().length;
var comboID = sender.get_id();
var btnSearchID = comboID.replace("ddlAccountCode", "btnSearch");
var btnCtrl = document.getElementById(btnSearchID);
//code to chk Ctrl + V
var e = eventArgs.get_domEvent();
if (e.keyCode == 86 && e.ctrlKey)
{
var len2 = sender.get_text().length; //-------Issue here : pasted text/length is always 0 (as the key is pressed only one time)
alert(len2);
if (len2 > 4) {
//alert("ctrl+v : Enable");
btnCtrl.disabled = false; //Enable
}
else {
//alert("ctrl+v : Disable");
btnCtrl.disabled = true; //Disable
}
}
else if (eventArgs.get_domEvent().keyCode != 8 && len > 4)
{
//alert("Chk manually entered text");
btnCtrl.disabled = false; //Enable
}
else if (eventArgs.get_domEvent().keyCode == 8 && len > 4){
//alert("Backspace Enable");
btnCtrl.disabled = false; //Enable
}
else {
btnCtrl.disabled = true; //Disable
}
}
</script>
</telerik:RadCodeBlock>
答案 0 :(得分:0)
OnClientKeyPressing
事件实际上是在按下按键的时间和使用按下按键的文本填充控件之间触发的。这意味着它将始终显示您的文本长度 - 在用户正在键入的正常情况下为1,并且当用户粘贴到其中时将没有文本。
我建议使用OnClientTextChange
事件,这将在控件中的文本实际更改后触发。在这种情况下,您不需要编写条件语句来处理ctrl+v
输入。但是,这只会在组合框失去焦点后触发。
另一种解决方案,如果您需要在用户按下键时触发而不是在组合框失去焦点后触发,则将您的代码包装在setTimeout
调用内,第1个参数为1 ms,允许控件在根据您的代码检查之前更新其文本。