Включить / отключить таблицу с помощью JavaScript для нескольких экземпляров на одной возрастной группе - PullRequest
1 голос
/ 21 января 2009

Я только что опубликовал один вопрос и получил ответ очень быстро, спасибо.

У меня есть новая проблема, поскольку у меня есть метка asp, которая динамически устанавливает текст во время создания экземпляра, а затем к ней привязана функция onmousedown, вызывающая функцию javascript, чтобы включить область таблицы, которая находится ниже, для отображения по умолчанию нет Все работает нормально, пока я не разместил два таких пользовательских элемента управления на странице. У них обоих правильный текст метки правильный, но включение javascript, кажется, устанавливает блокировку атрибута стиля отображения первой таблицы usercontrol вместо того, который находится ниже метки, по которой щелкнули. Я уверен, что это потому, что скрипт выполняется на стороне клиента (что я действительно хотел бы сохранить), и все пользовательские элементы управления имеют одинаковое имя идентификатора (так как все они являются экземплярами одного и того же пользовательского элемента управления), поэтому javascript для установки атрибут отображения стиля просто получает первую таблицу. Кажется, я не могу придумать хороший способ динамически именовать таблицу на instationation, чтобы я мог указать это уникальное имя id для javascript или любым другим способом сделать эту работу.

код asp пользовательского управления ниже:

function enableDivArea(objName) {
    document.getElementById(objName).style.display = "block";
}
function disableDivArea(objName) {
    document.getElementById(objName).style.display = "none";
    document.forms[0].submit();
}<asp:Label style="cursor:pointer;color:#EA9156;font-family:Arial,Helvetica,sans-serif;font-weight:bold;" ID="m_emailAddressLabel" onmousedown="enableDivArea('EmailFormDivArea');" runat="server" Text="someone@emailaddress.com"></asp:Label>
<table id="EmailFormDivArea" style="display:none; border-style: outset; border-width: thin">
    <tr>
        <td>To: <asp:Label ID="m_sendEmailToLabel" runat="server" Text=""></asp:Label></td>
        <td align="right"><asp:Label onmousedown="disableDivArea('EmailFormDivArea');" id="m_closeLabel" runat="server" Text="close"></asp:Label></td>
    </tr>
    <tr>
        <td><asp:Label ID="m_fromLabel" runat="server" Text="First Name:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_firstNameBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label1" runat="server" Text="Last Name:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_lastNameBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label2" runat="server" Text="E-mail:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_emailBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label3" runat="server" Text="Phone number:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_phoneNumberBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label4" runat="server" Text="Message:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_messageBox" runat="server" Visible="True" Rows="6" TextMode="MultiLine"></asp:TextBox></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><asp:Button ID="m_sendMessageButton" runat="server" Text="Send Message" 
                        onclick="m_sendMessageButton_Click" /></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><asp:Label runat="server" ID="m_statusLabel" Text="" Visible="true"></asp:Label></td>
    </tr>
</table> 

и код выглядит следующим образом:

protected void Page_Load(object sender, EventArgs e)
{
    m_emailAddressLabel.Text = this.Parameter;
    m_sendEmailToLabel.Text = this.Parameter;

}

Ответы [ 5 ]

1 голос
/ 21 января 2009

Иметь сервер runat таблиц и позволить пользовательскому элементу управления реализовать INamingContainer. Создайте идентификатор для таблицы и установите его программно (HtmlTable) в переопределенном CreateChildControls, например, в string.Concat (ID, "table").

РЕДАКТИРОВАТЬ: вам также нужны динамические ссылки на идентификаторы в JavaScript. Вы можете использовать некоторые для этого, а затем установить это из выделенного кода в CreateChildControls, но, может быть, проще переместить эти небольшие сценарии в линию и генерировать сценарии из кода, установка атрибутов клиента на asp: Label

0 голосов
/ 21 января 2009

Я буду помнить об этом во время последнего ответа Хенка.

Я остро "обманул" по-новому с помощью информации ваших парней. Я динамически добавил к метке атрибут, который я хотел, чтобы javascript запускал из onmousedown из события Page_Load, и отформатировал строку так, как я хотел. Вот линия, она работает фантастически (по крайней мере, то, что я искал).

m_emailAddressLabel.Attributes.Add("onmousedown", "enableDivArea('" + EmailFormDivArea.ClientID + "');");

Спасибо за вашу помощь.

0 голосов
/ 21 января 2009

упс, извините, забыл, что вы не можете использовать <%%> в теге сервера (и делаю это из моей головы). Для вас было бы лучше назвать скрипт так:

onmousedown="enableDivArea(this);"

В вашем скрипте вам больше не нужно делать document.getElementById, так как вы уже получаете элемент в качестве параметра.

0 голосов
/ 21 января 2009

Прежде всего вы можете установить свойство CssClass для стиля.

для скрытия: document.getElementById (theIdOfYourTable) .style.display = 'none';

включено идет то же самое

0 голосов
/ 21 января 2009

Просто короткая идея, у обеих таблиц одинаковый идентификатор? так что скрипт выбирает только первое, что находит?

сделайте ID уникальным!

используйте таблицу asp: и затем

onmousedown="enableDivArea('<%=tableName.ClientID%>');" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...