LinkBut​​ton作为默认按钮

时间:2012-07-18 10:35:48

标签: c# jquery asp.net

我在我的网络应用程序中使用链接按钮,我的'复合控件'没有使用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(&#39;ctl00$mainContent$Login$ctl09$mainContent_Login_btnSubmit&#39;,&#39;&#39;)">
        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/

我真的很想让这个工作无需重做我的所有控件!有人可以帮忙吗?

3 个答案:

答案 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'似乎对我有用,但我想知道这样做是否存在太大的安全风险?