我在我的网络应用程序中使用链接按钮,我的'复合控件'没有使用ASP面板(因此没有'DefaultButton'属性,而不是它可以工作)。我的链接按钮目前将href设置为'javascript:_doPostBack ..'(asp默认值),但是为了启用我的自定义客户端验证脚本,我还有'onclick'属性中的代码。
典型按钮:
<div class="button orange o_lime right Normal">
<a onclick="if (!validateFormmainContent_Login()) return false;"
id="mainContent_Login_ctl09_mainContent_Login_btnSubmit" defaultB="loginForm"
href="javascript:__doPostBack('ctl00$mainContent$Login$ctl09$mainContent_Login_btnSubmit','')">
Submit
</a>
</div>
需要“默认按钮”操作的典型表单行
<div class='row' ID='mainContent_Login_ctl03'>
<label ID='mainContent_Login_ctl04'>Email/Username</label>
<input name="ctl00$mainContent$Login$txtAccount" type="text" id="mainContent_Login_txtAccount" class="lime validate[required]" defaultB="loginForm" />
</div>
我目前尝试使用代码来完成这项工作:
<script type="javascript">
$('input[defaultB]').keypress(function (e) {
if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
$('a[defaultB=' + $(e.srcElement).attr('defaultB') + ']').click();
return false;
} else {
return true;
}
});
我当前尝试的解决方案为'defaultB'分配一个值,该值与相应按钮中定义的'defaultB'值匹配,这样按键'13'(回车)应该启动'click'事件。但没有发生任何事情:(
我已经创建了一个jsfiddle来帮助,但是它没有使用愚蠢的'无法找到函数'异常。 :(
http://jsfiddle.net/Ninjanoel/yQvKC/
我真的很想让这个工作无需重做我的所有控件!有人可以帮忙吗?
答案 0 :(得分:0)
我已更新代码,请参阅:
http://jsfiddle.net/yQvKC/5/
我相信你缺少的是: $(this)
我用
$('a[defaultB=' + $(this).attr('defaultB') + ']').click();
然后 $('a [defaultB ='+ $(e.srcElement).attr('defaultB')+']')。click();
答案 1 :(得分:0)
问题是,您将按键事件绑定到输入按钮。因此,如果用户按下按钮然后按Enter键,则将触发该事件。你应该将它绑定到表单!
我已经更新了代码: http://jsfiddle.net/YN56H/2/
您可能需要选择默认按钮(根据asp.net中生成的丑陋的html),但我希望这会有所帮助。
答案 2 :(得分:0)
$('input[defaultB]').keypress(function (e) {
if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
alert('enter pressed');
var _el = $('a[defaultB='+ $(e.srcElement).attr('defaultB') + ']');
eval(_el.attr('onclick'));
eval(_el.attr('href'));
return false;
} else {
return true;
}
});
http://jsfiddle.net/Ninjanoel/5WDKT/1/
我在这个例子中使用'eval'是危险的吗?对属性使用'eval'似乎对我有用,但我想知道这样做是否存在太大的安全风险?