Javascript 如何使用jQuery获取href属性

Javascript 如何使用jQuery获取href属性,javascript,jquery,asp.net,postback,linkbutton,Javascript,Jquery,Asp.net,Postback,Linkbutton,如何获取母版页修改过的asp:LinkButton的ID,以便使用javascript/jQuery模拟单击 通常情况下,我会获取'ctl05_butSaveAssociation'作为'u id'的值: function ClickSaveButton() { var _id = $('a[id$="butSaveAssociation"]').attr("ID"); __doPostBack(_id, ''); retur

如何获取母版页修改过的asp:LinkButton的ID,以便使用javascript/jQuery模拟单击

通常情况下,我会获取'ctl05_butSaveAssociation'作为'u id'的值:

function ClickSaveButton() {
        var _id = $('a[id$="butSaveAssociation"]').attr("ID");           
        __doPostBack(_id, '');
        return false;
    }
这不起作用,因为ID由于某种原因再次更改,正如我们可以看到的那样,使用FireBug并将鼠标悬停在asp:LinkButton上,我们有:

<a style="border-style: none; display: inline-block;" href="javascript:__doPostBack('ctl05$butSaveAssociation','')" class="CommandButton" id="ctl05_butSaveAssociation" onclick="SaveAssociation();" tabindex="0">Save</a>

如何使用jQuery动态实现这一点?

一种方法是在其周围放置一个
。大概是这样的:

<span id="button">
   <a style="border-style: none; display: inline-block;" href="javascript:__doPostBack('ctl05$butSaveAssociation','')" class="CommandButton" id="ctl05_butSaveAssociation" onclick="SaveAssociation();" tabindex="0">Save</a>
</span>

这将为您提供一种识别按钮的方法,即使它的id发生变化。

如果您使用的是ASP.NET 4或更高版本,您可以使用
clientdmode
使id与键入的id保持一致:


虽然HTML生成的ID具有
(因为是基于属性生成的),但ASP.NET帮助程序方法需要
$
。我真的不知道为什么不能在所有情况下都使用下划线,但就是这样

一件简单的事情就是使用replace,比如
\u id.replace(“\u“,“$”)
。完整代码:

function ClickSaveButton() {
    var _id = $('a[id$="butSaveAssociation"]').attr("id");
    __doPostBack(_id.replace("_", "$"), '');
    return false;
}
但我在这里想。。。为什么不调用单击事件

function ClickSaveButton() {
    $('a[id$="butSaveAssociation"]').click();
    return false;
}

您的原始代码应该可以工作
$=
应使其选择id为
s,其结尾为
“butSaveAssociation”
,控件仍会这样做。您确定要将代码正确复制到StackOverflow中吗?
SaveAssociation
方法在哪里?是的,我肯定。请看顶部的第二段摘录,看回发在参数中发送的内容,注意美元符号而不是下划线!这就是问题所在……
SaveAssociation
在这种情况下是不相关的……不过这并不重要<代码>“ctl05$butSaveAssociation”
仍然以
“butSaveAssociation”
结尾,因此
$=
应该仍然能够选择它。我一定错过了什么,但我看不到什么…太好了!这就解决了问题!我没有简单地使用click事件的原因(这是我最初尝试的)是click事件似乎只在客户端工作,完成更改后,.ascx控件将在页面上重新加载,但一旦刷新页面,更改将丢失,因为不会将任何内容保存到数据库中。这就是为什么我考虑回发到服务器。
function ClickSaveButton() {
    var _id = $('a[id$="butSaveAssociation"]').attr("id");
    __doPostBack(_id.replace("_", "$"), '');
    return false;
}
function ClickSaveButton() {
    $('a[id$="butSaveAssociation"]').click();
    return false;
}