2011-05-26 4 views
0

Как я могу получить идентификатор asp: LinkButton, который был изменен главной страницей, чтобы я мог имитировать щелчок с помощью javascript/jQuery?Как получить атрибут href с помощью jQuery

Обычно, с этим, я бы получить «ctl05_butSaveAssociation» в качестве значения для «_id»:

function ClickSaveButton() { 
     var _id = $('a[id$="butSaveAssociation"]').attr("ID");   
     __doPostBack(_id, ''); 
     return false; 
    } 

Это не работает, потому что изменения ID снова по какой-то причине, как мы можем видеть, используя FireBug и парит над осины: 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> 

Так на самом деле, если я жёстко правильный идентификатор, он работает с:

function ClickSaveButton() { 
     var _id = "ctl05$butSaveAssociation";  // hardcoded 
     __doPostBack(_id, ''); 
     return false; 
    } 

Как я могу реализовать это динамически с помощью jQuery?

+0

Где метод 'SaveAssociation'? – hunter

+0

Да, я уверен. Посмотрите на вторую выдержку наверху, посмотрите, что посылает посылку в параметр, обратите внимание на знак доллара вместо подчеркивания! Вот в чем проблема ... –

ответ

1

Хотя идентификаторы, созданные HTML, имеют _ (поскольку они генерируются на основе свойства ClientID), AS Вспомогательные методы P.NET ожидают $. Я действительно точно не знаю, почему он не может использовать знак подчеркивания во всех случаях, но это все ...

Одна простая вещь - просто использовать замену как _id.replace("_", "$"). Полный код:

function ClickSaveButton() { 
    var _id = $('a[id$="butSaveAssociation"]').attr("id"); 
    __doPostBack(_id.replace("_", "$"), ''); 
    return false; 
} 

Но я здесь думаю ... Почему вы просто не называете событие click?

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

Отлично! Это решило проблему!Причина, по которой я не просто использовал событие click (это то, что я пробовал изначально), состоит в том, что событие click, казалось, работало только на стороне клиента, управление .ascx перезагрузилось на странице с внесенными изменениями, но как только при обновлении страницы изменения будут потеряны, потому что ничего не будет сохранено в базе данных. Вот почему я подумал о том, чтобы сделать PostBack на сервере. –

0

Один из способов - разместить вокруг него <span>. Что-то вроде этого:

<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> 

И тогда в вас JQuery

var id = $('span[id="button"]').children().attr('id'); 

Это даст вам возможность идентифицировать кнопки, даже если это изменения идентификаторов.

Смежные вопросы