Понимание JavaScript getElementById для поиска элемента управления asp.net в форме sharepoint - PullRequest
0 голосов
/ 13 ноября 2009

Это для моей формы редактирования Sharepoint: Мне нужно иметь возможность использовать текстовое поле asp.net в моем JavaScript:

<asp:TextBox runat="server" id="ff17{''}" text="{@Container_x0020_Qty}" __designer:bind="{ddwrt:DataBind('u',concat('ff17',''),'Text','TextChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Container_x0020_Qty')}" />

Я пытаюсь прочитать это в своем javascript, как так:

var CCID = document.getElementById("ff17");

Это не работает ...

Однако, если я скопирую то, что страница отображает как идентификатор формы:

var CCID = document.getElementById("ctl00_m_g_64200ded_b593_468b_bca5_0ea023581b8a_ff17");

Это работает!

Есть ли способ заставить это работать без необходимости всегда вычислять часть ct?

Ответы [ 2 ]

2 голосов
/ 13 ноября 2009

Я не уверен, как это будет переводиться в sharepoint, но для обычных страниц asp.net я обычно помещаю такой скрипт в голову, чтобы получить идентификаторы клиента:

<head runat="server">
    <script type="text/javascript" language="javascript">           
        //ClientIDs for controls in naming containers that we'll want to use from javascript
        var Controls = {
            'ff17':<%="'" + ff17.ClientID%>',
                'othercontrol':<%="'" + othercontrol.ClientID%>'};
    </script>
</head>

Причина, по которой я делаю это следующим образом, состоит в том, чтобы избежать необходимости повторного рендеринга идентификатора везде, где я мог бы использовать его, и потому что я могу ссылаться на это из включенных файлов сценариев, не пропуская их через процессор asp.net. , Объект Controls должен избегать коллизий имен (нужно беспокоиться только об одном имени).

Недостатком является уродливая конкатенация строк для начальной кавычки, потому что здесь не работает более простой синтаксис '<%=o.clientid%>'. Кроме того, это не так хорошо работает с главными страницами, где заголовок находится на главной странице, а элементы управления, которые вас интересуют, находятся на странице сведений. Но вы можете сделать это в другом месте на своей странице.

0 голосов
/ 13 ноября 2009

Я не уверен, как работает sharepoint и bindings. Но в ASP.net вы бы сделали что-то вроде этого.

var CCID = document.getElementById('<%= ff17.ClientID %>');

Я не уверен, что это сработает, но это может указать вам правильное направление.

...