2014-02-11 60 views
1

我有两个下拉菜单和一个LinkBut​​ton下拉列表:清空事件不工作

<form name="OptionForm" method="post"> 
    <p> 
    <label for="ddlLocJobPhOpt" class="ui-accessible">Location Job Phase</label> 
    <asp:DropDownList runat="server" ID="ddlLocJobPhOpt" data-mini="true"></asp:DropDownList> 
    </p> 
    <p> 
    <label for="ddlFrmnOpt" class="ui-accessible">Foreman</label> 
<asp:DropDownList runat="server" ID="ddlFrmnOpt" data-mini="true"></asp:DropDownList> 
    </p> 

    <asp:LinkButton ID="lnkSelectOptions" data-icon="arrow-r" data-iconpos="right" runat="server" data-role="button" Class="custom-btn" data-inline="true" data-theme="c" data-transition="pop" UseSubmitBahavior="false" href="#" data-mini="true" OnClientClick="SelectOptions()">GO</asp:LinkButton> 
</form> 

当我点击LinkBut​​ton的这个功能火灾:SelectOptions()

我试图清空第二个下拉列表按钮被点击时列出。但是,当我补充一下:

var frmnDDL = $('#ddlFrmnOpt'); 
frmnDDL.html(""); 

var frmnDDL = $('#ddlFrmnOpt'); 
frmnDDL.empty(); 

,然后renavigate到下拉列表上方的OptionForm仍然填充。

我在做什么错?

+1

这是你的同一个问题...成立了第二小提琴后,你会得到更好的反应。 – VIDesignz

+0

您是否在其他帖子上尝试了我的建议? '('#ddlFrmnOpt')。find('option')。remove();' – VIDesignz

+0

是的,我回应。 –

回答

2

由于@CaffGeek指出的那样,你的问题是,ASP.NET使用控件的父层次来决定所呈现的ID的事实。通过使用控件的静态ID,您可以继续使用您已拥有的Javascript和jQuery代码。

尝试

<asp:DropDownList runat="server" ClientIDMode="Static" ID="ddlLocJobPhOpt" data-mini="true"></asp:DropDownList> 

<asp:DropDownList runat="server" ClientIDMode="Static" ID="ddlFrmnOpt" data-mini="true"></asp:DropDownList> 

随着.NET 4中,加入

ClientIdMode="Static" 

到任何服务器端控件告诉ASP.NET来呈现准确的ID,你在您的标记中指定,而不是基于其传统规则进行渲染。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v=vs.110).aspx

+0

啊,那是在4.0中引入的?我从3.5开始没有做任何WebForms编程,不记得这个。 TIL – CaffGeek

+0

是的,这是4.0中的一个新功能 –

3

我几乎可以保证frmnDDL.length为0

净重命名控制,以类似ctl00_MainContent_ddlFrmnOpt

你有两个选择

  1. 您可以在jQuery选择改变所产生的实际名称(检查呈现的html)

  2. 你可以改变你的选择器做ap喜欢的东西$("[id$=ddlFrmnOpt]")$("select[id$=ddlFrmnOpt]")

之后,有很多方法来清空选择

frmnDDL.empty(); 
frmnDDL.children().remove(); 
frmnDDL.find('option').remove(); 
//etc, etc 

其次,我很迷茫artial匹配你的意思是当你说“然后renavigate到上面的OptionForm下拉列表仍然填充。“如果您正在执行回发,.net会在其页面生命周期中重新加载其数据的下拉菜单。你在DOM中改变了什么是客户端,并且网络是无状态的,这些改变在回发之间不会被记住。

1

入住这Fiddle

$('button').click(function(){ 
    $('#mySelect option').each(function(){ 
     $(this).remove(); 
    }); 
}); 
+0

这可能不会解决问题,并且在这里使用'.each'不是一个好主意。 ('#mySelect option')。remove();'或$('#mySelect')。children()。remove();' – CaffGeek

+0

@CaffGeek我同意,虽然我在他的另一篇文章中提出了类似于你的建议的东西,但它并没有被删除,所以我不确定是否需要循环删除每一个。 – VIDesignz