当输入字段改变(onchange)时,我触发一个函数来设置一个变量.唯一的问题是该字段首先必须在设置变量之前失去焦点,并且我可以检查字段是否已更改,这是我在用户单击选项卡时要执行的操作,以便我可以检查是否用户忘记在上一个标签中提交表单.何力会失去所有可能领域的焦点,所以首先onchange可以举办活动?
我有一个<input type="text">字段,当这个字段失去焦点时我需要清除它(这意味着用户点击了页面上的某个地方).但有一个例外.当用户单击特定元素时,不应清除输入文本字段.
我试图用来event.relatedTarget检测用户是否点击了某个地方而不是我的具体点击<div>.
但是正如您在下面的代码段中看到的那样,它根本不起作用.event.relatedTarget总是回来null!
function lose_focus(event) {
if(event.relatedTarget === null) {
document.getElementById('text-field').value = '';
}
}Run Code Online (Sandbox Code Playgroud)
.special {
width: 200px;
height: 100px;
background: #ccc;
border: 1px solid #000;
margin: 25px 0;
padding: 15px;
}
.special:hover {
cursor: pointer;
}Run Code Online (Sandbox Code Playgroud)
<input id="text-field" type="text" onblur="lose_focus(event)" placeholder="Type something...">
<div class="special">Clicking here should not cause clearing!</div>Run Code Online (Sandbox Code Playgroud)
我们在一个布局中有17个api,DPAD控制和4个edittexts用于引脚输入.当用户试图打开锁定在应用程序中的某些东西时,他会面对片段,他应该输入4位数的针脚.当打开视图时,我们以编程方式将焦点设置为第一个针脚edittext并显示键盘.当用户输入第一个引脚数字时,我们将视图焦点设置为第二个引脚edittext,其中用户应输入第二个引脚值,依此类推.
问题: 在用户输入第一个引脚值后,键盘焦点(突出显示)消失,对于第二个引脚,用户应该再次从键盘开始导航.21 api相同的代码运行良好,键盘焦点(突出显示)保持在以前的值.如何在17 api之前保持键盘焦点(突出显示),同时将视图焦点设置在另一个视图上?
这是代码:
public class PasswordFragment extends BaseFragment {
private final ArrayList<Disposable> disposables = new ArrayList<>();
@BindViews({R.id.passFirst, R.id.passSecond, R.id.passThird, R.id.passFour})
EditText[] pinEdits;
@BindDrawable(R.drawable.border_light)
Drawable borderLight;
@BindDrawable(R.drawable.border_white)
Drawable borderWhite;
@Inject
PrefsRepo prefsRepo;
@Inject
ToastUtil toastUtil;
@BindView(R.id.passTitle)
TextView passTitle;
@BindString(R.string.insert_pin)
String defDialogMes;
private InputMethodManager inputMethodManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.getAppComponent().inject(this);
inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, …Run Code Online (Sandbox Code Playgroud) android lostfocus lost-focus android-softkeyboard android-view
我有一个wpf TextBox,并连接了它的TextChanged事件.问题是此事件仅在焦点从文本框中删除时触发.
是否存在类似于TextChanged的事件,当字符键入文本框时会立即触发,而不是焦点更改时?
我不认为 Firefox 有任何选项可以emulate a focused page调试一旦选项卡失去焦点会发生什么,就像 Chrome 可以做的那样.
有什么方法可以固定 Firefox 中窗口的焦点状态吗?(就像隐藏在某处的设置选项)似乎一旦选项卡实际上失去焦点,通过 JS/Webconsole 可以完成的任何操作都将被浏览器覆盖。
当然,可以通过各种其他方式调试脚本(使用断点、调用监听 onblur 事件的函数等),但是这个 Chrome 选项非常方便,我想知道是否可以完成类似的操作在 Firefox 中,即。修复选项卡的焦点状态。
好吧,我有一个具有IsEditing属性的控件,为了参数的缘故,它有一个默认模板,通常是一个文本块,但是当IsEditing为true时,它会在文本框中交换以进行就地编辑.现在当控件失去焦点时,如果它仍在编辑,它应该退出编辑模式并在TextBlock模板中交换回来.非常直接,对吧?
想想在Windows资源管理器或桌面上重命名文件的行为(这与我所知道的相同......)这就是我们想要的行为.
问题是您不能使用LostFocus事件,因为当您切换到另一个窗口(或作为FocusManager的元素)时,LostFocus不会触发,因为控件仍具有逻辑焦点,因此无法工作.
如果您改为使用LostKeyboardFocus,虽然这确实解决了"其他FocusManager"问题,但现在您有了一个新问题:当您进行编辑并右键单击文本框以显示上下文菜单时,因为上下文菜单现在有键盘焦点,您的控件失去键盘焦点,退出编辑模式并关闭上下文菜单,使用户感到困惑!
现在我已经尝试设置一个标志,在菜单打开之前忽略LostKeyboardFocus,然后在LostKeyboardFocus事件中使用该fiag来确定是否将其踢出编辑模式,但是如果菜单打开并且我点击其他位置应用程序,因为控件本身不再有键盘焦点(菜单有它)控件永远不会获得另一个LostKeyboardFocus事件,因此它仍然处于编辑模式.(我可能必须在菜单关闭时添加一个检查以查看焦点是什么,然后手动将其从EditMode中踢出来,如果它不是控件.这看起来很有希望.)
那么......任何人都知道如何成功编码这种行为?
标记
在参考此MSDN页面(或关于此事项的任何相关页面)时,它指出:
使用键盘更改焦点时,焦点事件按以下顺序发生:
- 输入
- 的GotFocus
- 离开
- 证实
- 验证
- 引发LostFocus
但是,当您使用鼠标来引发事件时,订单会发生变化!
使用鼠标或通过调用Focus方法更改焦点时,焦点事件按以下顺序发生:
- 输入
- 的GotFocus
- 引发LostFocus
- 离开
- 证实
- 验证
这不会使事件链完全不同吗?我的解释是键盘链确保一切正常,然后引发LostFocus事件.然而,鼠标事件似乎在出于某种原因进行验证之前提高了它.这是为什么?
编辑网格时,如果我在网格外单击,我编辑的框仍然可以编辑.当失去焦点时,如何让编辑过的单元格"完成"编辑?
在下面的简单WPF应用程序中,a TextBox设置为在焦点从该控件中丢失时更新属性,如下所示
<DockPanel>
<ToolBar DockPanel.Dock="Top">
<Button>Test</Button>
</ToolBar>
<TextBox Text="{Binding MyString}" />
</DockPanel>
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public string MyString
{
get { return _myString; }
set { _myString = value; }
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此应用程序时,在文本框中输入一些文本,然后单击"测试"按钮,我的MyString属性上的断点不会引发,也不会引发该FocusLost事件的任何事件处理程序.仅当通过某些其他方式(例如窗口关闭)从控件丢失焦点时才会引发这些事件.
这对我们造成了问题,因为实际上"测试"按钮包含依赖于MyString正在更新的属性的逻辑.
FocusLost当我单击"测试"按钮时,如何确保正确引发事件并更新绑定?看起来问题是由于使用而导致的问题ToolBar,因为用ToolBar标准按钮替换不会导致这种行为.
在我的WPF应用程序中,我想要一个菜单项有一个文本框.我已设法使用以下代码执行此操作:
<Menu Height="23" HorizontalAlignment="Stretch" Name="MainMenu" VerticalAlignment="Top">
<MenuItem Header="File">
<MenuItem Header="Exit" Click="menuItemExit_Click" />
</MenuItem>
<MenuItem Header="Settings">
<MenuItem Header="Some setting" IsCheckable="True" />
<Separator />
<MenuItem>
<MenuItem.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Content="Some value:" Margin="0,3,6,0" Padding="0" />
<TextBox Margin="0,0,0,6" Grid.Column="1" />
</Grid>
</MenuItem.Header>
</MenuItem>
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
此代码显示像我预期的菜单项,但如果我开始在文本框中键入一些值,然后移动鼠标(而不是单击)远离文本框菜单项,文本框失去焦点,我无法继续键入,直到我点击再次在文本框上.如何在WinForms中实现与文本框菜单项相同的行为?也就是说,如果用户在文本框外部单击或按Tab键,则文本框仅失去焦点.
提前致谢.
lost-focus ×10
wpf ×4
events ×3
javascript ×2
lostfocus ×2
textbox ×2
android ×1
android-view ×1
c# ×1
firefox ×1
focus ×1
focusmanager ×1
focusout ×1
jquery ×1
menuitem ×1
onblur ×1
slickgrid ×1
textchanged ×1
toolbar ×1
winforms ×1