在 Qt 4 中,默认情况下,在对话框中使用 Tab 键会将默认按钮更改为使用 Tab 键的按钮。这使得标签看起来有点丑陋和分散注意力,因为在标签导航期间会发生额外的重绘,这会分散用户的注意力。
有没有办法禁用此 Qt 功能并保留选项卡导航未修改的默认按钮?
我只是好奇; 你们有没有任何好的javascriptresources为div中的所有元素设置defaultbutton?我有很多执行各种javascript函数的div,我希望所有这些都能在按下enter时执行按钮脚本.
提前致谢!
我有一个页面有两个按钮,btnSearch和btnAddUser.aspx页面如下.如您所见,默认按钮是btnAddUser.但是当我在文本框txtFilter中键入内容时,我想将默认按钮设置为btnSearch.我添加了一个JavaScript函数clickButton,并在page_load中添加了以下代码.问题是当我在文本框中输入内容后按Enter键时,单击btnSearch和btnAddUser.我有什么办法可以不点击btnAddUser.
txtFilter.Attributes.Add("onkeypress", "return clickButton(event, '" + btnSearch.ClientID + "')");
<asp:Panel ID="MainPanel" runat="server" DefaultButton="btnAddUser">
<table align="center" width="900">
<tr>
<td align="left" width="70%">
<asp:TextBox ID="txtFilter" runat="server" Width="200"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="Search"
onclick="btnSearch_Click" CausesValidation="false" />
</td>
<td align="right" width="30%">
<asp:Button ID="btnAddUser" runat="server" Text="Add User" Width="85px"
CausesValidation="False" onclick="btnAddUser_Click" />
</td>
</tr>
<tr>
...
</asp:Panel>
function clickButton(e, buttonid) {
var evt = e ? e : window.event;
var bt = document.getElementById(buttonid);
if (bt) {
if (evt.keyCode == 13) {
bt.click();
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:谷歌搜索后,我找到了一个解决方案如下.看起来很有效.但它不适用于Firefox?有谁知道如何解决它? …
我有一个自定义按钮控件,不是从Button派生的.我是否可以实现IsDefault的等价物,以便调用与我的控件关联的命令.我希望这是一个附加属性,我可以添加到任何控件,但据我所知,它似乎不是.如果我的控件不是来自Button,或者至少有一个合理的解决方法,我是不是运气不好?
更新: 我刚刚看了一下反射器,看看它是如何在Button下进行的,我必须说它不是我见过的最自我解释的代码.看来,为了处理Button默认的概念,至少有3个自定义类型的自定义类型.由于似乎没有现成的借用IsDefault功能的方法,我想我必须缩小我想要实现的目标,这样我至少可以获得默认焦点和访问键处理工作而忽略Button.IsDefault实现中隐藏的复杂性.
更新: 添加了以下代码示例,显示了我尝试itowlson的建议的不必要的尝试.
MyButton.xaml
<UserControl x:Class="IsDefault.MyButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="28"
Width="117">
<Grid>
<Button Click="Button_Click">
<Button.Template>
<ControlTemplate>
<Border BorderThickness="2"
CornerRadius="12"
Background="DarkSlateBlue">
<TextBlock Foreground="WhiteSmoke"
HorizontalAlignment="Center"
VerticalAlignment="Center">Some Text</TextBlock>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
MyButton.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IsDefault
{
/// <summary>
/// Interaction logic for MyButton.xaml
/// </summary>
public partial …Run Code Online (Sandbox Code Playgroud) 如何在asp.net中将链接按钮设置为asp:panel的默认按钮?我知道一个按钮可以设置为默认值,但我的应用程序使用所有表单的链接按钮.任何建议如何做到这一点.
编辑:
现在我尝试了这个,它也适用于Firefox,但我的javascript验证(即)onclient点击我的linkbutton不起作用为什么?
var __defaultFired = false;
function WebForm_FireDefaultButton(event, target) {
var element = event.target || event.srcElement;
if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {
var defaultButton;
if (__nonMSDOMBrowser)
defaultButton = document.getElementById(target);
else
defaultButton = document.all[target];
if (defaultButton) {
if (typeof (defaultButton.click) != "undefined")
defaultButton.click();
else
eval(unescape(defaultButton.href.replace("javascript:", "")));
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
第二次编辑:
我能够使我的自定义linkbutton控件工作,但无法将OnClientClick挂钩到它.源using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net.
我这样做了,
<%@ Register Namespace="App_Code" TagPrefix="ac" %>
<asp:Label runat="server" …Run Code Online (Sandbox Code Playgroud) 我需要一个解决方案来解决"默认按钮"老化问题.即你在文本框中按Enter键,但表单上有一个提交按钮,而不是你想要触发的按钮(或者你可能根本不希望该表格被触发).
我想知道以下'解决方案'.有点hacky,但据我所知,应该是可靠的.
在表格内部,第一件事是一个看不见的按钮.然后一些jquery立即禁用它.如果您在表单上按Enter键,此按钮将被视为"默认按钮"并被触发,但由于"return false"事件处理程序而无效.
我以前见过的解决方案依赖于keydown事件处理程序之类的东西,或者其他看似复杂/难以在每个浏览器中测试的东西.
我的解决方案(我以前没见过,但可能不是唯一的)似乎更简单,我认为非常可靠.您甚至可以判断javascript是否已被禁用且有人点击进入,因为服务器将在表单数据中收到此按钮.
<form action="/store/checkout" method="post">
<input id="btnFakeSubmit" name="FakeSubmit" src="/images/pixel.gif"
style="width:1px; height:1px; position:absolute;" type="image" />
<script>
$('#btnFakeSubmit').click(function() {
return false;
});
</script>
Run Code Online (Sandbox Code Playgroud)
有关此解决方案的任何建议 - 包括在所有浏览器中隐藏按钮的最佳方法.
我正在使用JQuery Dialog Box.
我在下面的代码中打开了对话框.
$('#MyLogin').dialog({
autoOpen: true,
width: 450,
modal: true,
draggable: false,
title: $('.LoginpopupHeaderText').text(),
close: function(event, ui) {showSelect();}
});
Run Code Online (Sandbox Code Playgroud)
当对话框打开时,其中有登录按钮,使用click事件验证其中的用户名和密码字段.请参阅下面的代码示例.
//Login Button Clicked
$('#loginButton').click(function()
{
//Code goes here
});
Run Code Online (Sandbox Code Playgroud)
我的登录按钮是图像而不是按钮.
现在我只想在我的登录对话框打开时按下" Enter "按钮,按下"Enter"按钮后它应该调用我的" loginButton "点击事件,这样它就像我们在打开时点击了loginbutton一样对话框.
请指教!
谢谢.
最好的祝福,
我正在处理一个有两个主要按钮的表单,"确定"和"取消".我已将表单的"Accept Button"属性设置为"OK"按钮.
目标:我希望"确定"按钮是默认的,这样当打开表单时,"确定"按钮会突出显示,如果按下回车键则会启动.
问题:当表单加载时,"取消"按钮会突出显示,直到用户单击表单中的任意位置,然后"确定"按钮变为高亮显示.
有什么建议?
jquery ×3
asp.net ×2
acceptbutton ×1
button ×1
c# ×1
form-submit ×1
forms ×1
html ×1
javascript ×1
linkbutton ×1
navigation ×1
panel ×1
qt ×1
tabs ×1
winforms ×1
wpf ×1