我已经制作了自己的datagridview控件,其中包含ovveride OnKeyDown事件:
public partial class PMGrid : DataGridView
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; //suppress ENTER
//SendKeys.Send("{Tab}"); //Next column (or row)
base.OnKeyDown(e);
}
else if (e.KeyCode == Keys.Tab)
{
base.OnKeyDown(e);
this.BeginEdit(false);
}
else
{
base.OnKeyDown(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击datagridview并按Enter键时,它工作正常,因为行未更改且触发了KeyUp事件.但是当我按Tab键时,选择了下一个单元格并将其更改为EditMode.当我在这个单元格中按Enter键时,KeyUp事件不会被触发,KeyPress也会被触发.我尝试这样做,用户可以从一个单元格移动到下一个单元格,然后用户可以在此单元格中写入内容,然后当用户按Enter键时,此值将保存到数据库中.但是当单元格在EditMode中时,我无法检测到该用户按Enter键.
谢谢
我知道我可以检测到一个键,使用以下代码按下:
$('input').keyup(function (e){
if(e.keyCode == 13){
alert('enter');
}
})
Run Code Online (Sandbox Code Playgroud)
但我需要知道是否有任何按键被按下.伪代码:
if ($('input').keyup() == true)
{
doNothing();
}
else {
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我将此解决方案调整为脚本。这样做的目的是防止用户键入未经授权的字符(当然,后端也有一个过滤器)。
$('#someinput').keyup(function() {
var $th = $(this);
$th.val( $th.val().replace(/[^a-zA-Z0-9]/g, function(str) {
console.log(str);
return '';
}))
})
Run Code Online (Sandbox Code Playgroud)
它很好用,但是我还需要用户输入允许的特定字符,例如:。,!??ñáéíóú-我的意思是,基本a-zA-Z0-9加上一些基本字符和一堆特殊语言字符。
实际需要忽略的是:@#$%^&*()= _ +“':; / <> \ | {} []
有任何想法吗?谢谢!
解决方案感谢迈克尔
//query
$('#someinput').keyup(function() {
var $th = $(this);
$th.val($th.val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';}));
}).bind('paste',function(e) {
setTimeout(function() {
$('#someinput').val($('#someinput').val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';}));
$('#someinput').val($('#someinput').val().replace(/\s+/g,' '));
},100);
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个简单的搜索框.如何在输入框中输入单个字母后触发功能?我使用了.keyup,但这似乎毫无用处,因为当输入变音字符时,该函数会被触发三次.
<input id="text" type="text" />
<div></div>
<script>
$('#text').keyup(function(){
$('div').append('TEST'+$(this).val());
});
</script>
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,除非你输入任何变音字符:±,ś,ł,ż,ź,ć等.
我不能使用.keypress或.keydown,因为它们在输入字符之前触发一个函数.
稍后编辑:
我知道我的例子可能不够清楚,无法理解这个问题,但是......每次输入一个字母时,在我的真实代码中,都会执行一个SQLite查询.如果类型是变音字符或大写字母,则查询执行三次或两次,这会减慢整个脚本的速度.如果您在计算机Web浏览器中执行脚本,它将没有太大的区别,但移动浏览器存在明显的延迟.
我有2个文本框字段.电子邮件和用户名.当我输入电子邮件字段时,我想要动态更新用户名,电子邮件字段中的字母.我有这个代码,但它不起作用
$('#txt_email').keyup(function() {
$('#txt_username').text($(this).val());
});
Run Code Online (Sandbox Code Playgroud)
如何在 Angular 的表格单元格中编写向上键和向下键的功能?(就像我们如何使用向上和向下箭头键在 Excel 工作表中的单元格中移动键一样)。
这是我的代码:http : //plnkr.co/edit/vk937A1VWNPIFQYkoPsM?p=preview
<table>
<thead>
<tr>
<th class="under-below" *ngFor="let col of columns">{{col.display}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let row of rows">
<td *ngFor="let col of columns">
<div *ngIf="!col.editable">{{colLabelFunction(row, col)}}</div>
<input type="text" value="{{colLabelFunction(row, col)}}" *ngIf="col.editable">
</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我想使用 keyup 和 keydown 键在“第 2 列”文本输入(单元格)上上下移动。
我正在寻找一种方法来确定何时单击或使用回车键选择mat-option内部mat-autocomplete.
该click事件绑定如预期,但作品keyup.enter甚至只是keyup事件不起作用.
这是库中的错误还是我做错了什么?
<mat-option (click)="onEnter()" (keyup.enter)="onEnter()" *ngFor="let state of filteredStates | async" [value]="state.name">
Run Code Online (Sandbox Code Playgroud)
这是一个实例 - https://angular-3okq5u.stackblitz.io
更新:请提及是否有更好的方法来处理<mat-option>元素级别的选项选择.
主要代码:
var clone = div.clone();
clone.attr('id', sabad_kala_id);
$('.content').append(clone);
$('div#'+sabad_kala_id).replaceWith('<tr id='+sabad_kala_id+'><td width="50"><a class="del_kala" id='+sabad_kala_id+'><img src="images/delete.png" alt="delete" /></a></td><td width="50">1.</td><td width="388">'+title+'</td><td width="80" clas="mm"><input class="count" type="text" value='+count+' /></td><td width="100">'+price+' $</td><td width="120">'+price_count+' $</td></tr>');
Run Code Online (Sandbox Code Playgroud)
并且这个代码在追加和替换后运行完美,用户可以input.count在表格和下面的代码中编辑运行:
('input.count').keyup(function(e){
alert(test);
});
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用.
我尝试在输入字段中按下返回键时触发按钮。这有效。但是,如果我按下 Tab 键,则不会触发任何内容,因为未捕获 TAB 键事件。
例如,这是我的 JQ 代码片段:
$("input[name=input]").on("keypress, keydown, keyup", function(e) {
var code = e.keyCode || e.which;
if ( code == 13 || code == 9 ) {
$("input[name=btn]").trigger("click");
}
});
Run Code Online (Sandbox Code Playgroud)
我不知道如何让 Tab 键像回车键一样工作。
我正在访问input带有id 的标记的text属性currency-converter
并尝试将其转换为浮点值,因此我可以应用一些数学转换将其转换为USD,然后<h3>使用id label显示该值的标记.
唯一的问题是NAN即使输入中的唯一值是数字,parseFloat()也会返回.4或者55例如.
为什么parseFloat会返回NAN?
<script>
$(function(){
$("#currency-converter").keyup(function(){
$('#label').text(parseFloat($("#currency-converter").text) + " BTC-ICO");
});
});
</script>
Run Code Online (Sandbox Code Playgroud) keyup ×10
jquery ×7
javascript ×5
angular ×2
html-table ×2
c# ×1
datagridview ×1
editmode ×1
events ×1
filter ×1
keydown ×1
keystroke ×1
regex ×1
typescript ×1
winforms ×1