2014-02-25 125 views
1

我的问题是我有一个下拉列表的SelectedValue没有被传递到ASP.NET回发。从页面中提取jquery更改处理程序并隔离选项的选择后,我可以看到即使tho“:selected”也给了我新选择的选项,它不会粘住,因此空白选项值将传回给服务器。jquery:选择选项选择的属性没有改变

这个jsfiddle重现了这个问题。从列表中选择一个选项,然后单击go并查看警告框中显示的HTML以查看我正在进行的操作。

http://jsfiddle.net/GAcEw/

这里是一个独立的网页版本:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $('#ddl').on('change', function (e) { 
     $('.sv').text($(this).find(":selected").attr('value')); 
     }); 
$('#go').click(function() { alert($('#ddl').html()) }); 
     }); 
</script> 
<select name="ddl" id="ddl"> 
<option selected="selected" value="">-- Choose --</option> 
<option value="1">Degree</option> 
<option value="2">HND</option> 
<option value="16">HNC</option> 
</select> 
<div><span>SelectedValue: </span><span class="sv"></span></div> 
<div><input id="go" type="button" value="go"/></div> 

我在做什么错?

干杯, .pd。

编辑:

代码后面的usercontrol。该设置是主 - >页面 - > TabControl-> UserControl->的DropDownList

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 


    JSHelper.Add("/scripts/jquery-stuff.js", Me.Page) 

    If Not IsPostBack Then 
     bindDDL(ddl, True, "") 

    End If 
End Sub 

Public Shared Sub bindDDL(ByRef _ddl As DropDownList, Optional ByVal _incBlank As Boolean = False, Optional ByVal _valBlank As String = "") 
    _ddl.Items.Clear() 
    If _incBlank Then 
     _ddl.Items.Add(New ListItem("-- Choose --", _valBlank)) 
    End If 
    _ddl.AppendDataBoundItems = True 
    _ddl.DataSource = QualificationTypeGetActive() 
    _ddl.DataTextField = "Description" 
    _ddl.DataValueField = "QualificationTypeID" 
    _ddl.DataBind() 

End Sub 
+0

安置自己的代码后面的部分代码。 –

回答

0

从jQuery的生成.html将返回初始化,因为它使用浏览器的innerHTML财产的任何数据,但您的数据有,如果没有问题你试图提交它。所以不用担心它在改变DOM改变,这里就是一个证明:

<form class='test'> 
<select name="ddl" id="ddl"> 
    <option selected="selected" value="">-- Choose --</option> 
    <option value="1">Degree</option> 
    <option value="2">HND</option> 
    <option value="16">HNC</option> 
</select> 

$(function() { 
    $('#ddl').on('change', function (e) { 
     $('.sv').text($(this).find(":selected").attr('value')); 
    }); 
    $('#go').click(function() { 
     alert($('#ddl').html()) 
    }); 
    $('.test').submit(function(e){ 
     e.preventDefault(); 
     console.log($(this).serializeArray()); 
    }); 
}); 

结果:

0: Object 
    name: "ddl" 
    value: "2" // I selected your second option while testing 

Try it yourself

+0

好的,谢谢,那么我怎么知道为什么当表单回传时,DropDownList.SelectedValue =“”? – twelveFunKeys

+0

你是什么意思回贴? –

+0

这是一个ASP.NET WebForms应用程序。下拉列表从数据库中填充到服务器端。选择一个选项后,点击按钮会导致回发。那时,选定的值已经回到“”。但没关系,我发现了这个问题。有一个从Page_load调用的函数明确地设置了SelectedValue =“”。我只是没有想到要寻找那个远方。 – twelveFunKeys