代码之家  ›  专栏  ›  技术社区  ›  uzay95

如何用javascript生成假回发?

  •  5
  • uzay95  · 技术社区  · 15 年前

    我的页面上有DropDownList,它的SelectedIndexChanged方法是在代码隐藏文件(.cs)中创建的。

    我想创建一个带有标签的假回发(onMouseOver事件)。

    首先,我查看了HTML的源代码。

    <select name="ctl00$cpholder_ana$ddlFaturaNolar" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" id="ctl00_cpholder_ana_ddlFaturaNolar">
        <option selected="selected" value="CHOOSE"></option>
        <option value="001926">[ 30.04.2009 - 156.492,00 TL ]  001926</option>
    </select>
    
    • 然后,我复制

      onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" 
      

    并且,我创建了一个带有mouseover事件的标签(以进行回发,但当它被DropDownList触发时)

    <a onmouseover="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)">asdasdasdasdad</a>
    

    但它没有转到SelectedIndexChanged方法。

    • 首先,为什么?
    • 第二,我该怎么做?

    从现在开始谢谢。

    4 回复  |  直到 13 年前
        1
  •  11
  •   Kirtan    15 年前

    您可以使用此代码段-

    __doPostBack('<%= dropdownlist.UniqueID %>', '');
    

    您不能使用硬编码的唯一ID,因为它们可能由于许多原因而更改。例如,如果父控件的ID发生更改,则ID将发生更改等。您必须使用上面给出的代码从服务器端获得唯一ID。

    编辑:忘了提一件重要的事。只有当下拉列表的selectedIndex更改时,页面才会回发:)因此,如果要激发该事件,请使用此更改下拉列表的索引,然后调用 __doPostBack 代码-

    document.getElementById("<%= dropdownlist.UniqueID %>").selectedIndex = 1;
    __doPostBack('<%= dropdownlist.UniqueID %>', '');
    

    Edit2:在Bob所说的基础上,您可以使用隐藏的服务器控件。我建议您使用一个asp:hidden控件并连接它的onValueChanged事件。因此,每当您想将页面发回服务器时,只需更改隐藏变量的值。这样就不必使用隐藏按钮。

    document.getElementById("<%= hiddenField.UniqueID %>").value = (new Date()).getTime();
    
        2
  •  1
  •   Hans Olsson    13 年前

    很抱歉,伙计们

    _ DoPostBack不适用于DropDownList,但适用于Button。所以做一件事

    添加一个按钮,该按钮应如下所示

    <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" 
    OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged">
      <asp:ListItem Text="All" Value="0" Selected="True"></asp:ListItem>
      <asp:ListItem Text="Published" Value="1"></asp:ListItem>
      <asp:ListItem Text="Pending" Value="2"></asp:ListItem>
      <asp:ListItem Text="Rejected" Value="3"></asp:ListItem></asp:DropDownList>
    

    现在调用你的doPostback方法

    __doPostBack('<%= btnRefresh.UniqueID %>','');
    
        3
  •  0
  •   janhartmann    15 年前

    不是吗? <%= ddlFaturaNolar.ClientID %> ?

        4
  •  0
  •   Bob    15 年前

    您可以尝试的另一个选项是在您的页面上创建一个隐藏的(style=“display:none”不要使用可见属性)asp:按钮,我觉得这比较容易,而且很可能会被破坏。当你想回发时,你可以模拟点击那个按钮。

     document.getElementById("<%= Button1.ClientID %>").click();
    

    如果要坚持在下拉列表中回发,请确保下拉列表的AutoPostback属性仍然设置为true。请记住,此行为有点奇怪,您正在鼠标上方触发选定的更改事件。这不仅有点令人困惑,而且还会增加意外回发的风险,因为很容易将鼠标悬停在某个内容上而不希望发生任何事情。