我有一个嵌套的 ASP.NET ListView,外部的一个呈现问题组,内部的一个呈现组内的不同问题。一些问题以下拉列表的形式呈现。我想在不进行回发的情况下检测更改的选定值。我见过很多看起来像“$(#control).val()”的引用,但我需要更多的灵活性。
我在 C# 代码中添加 JavaScript,它看起来像这样:
js = string.Format("javaScript:setInputSelectOption('{0}'); return false;", hidSelector.Value);
ddlInputSelectOptions.Attributes.Add("onchange", js);
生成的 aspx 文件包含此生成的代码;
<div id='Management_q2'>
<input type="hidden" name="ctl00$body$lstExecutive$ctrl1$hidSelector" id="ctl00_body_lstExecutive_ctrl1_hidSelector" value="Management" />
<select name="ctl00$body$lstExecutive$ctrl1$ddlInputSelectOptions"
id="ctl00_body_lstExecutive_ctrl1_ddlInputSelectOptions"
onchange="javaScript:setInputSelectOption('Management'); return false;">
<option value="0">Not Present</option>
<option selected="selected" value="1">Occasionally</option>
<option value="2">Customarily and Regularly</option>
<option value="3">Constantly</option>
</select>
</div>
我的 .js 文件包含以下代码:
function setInputSelectOption(question) {
var n = $('[id$=' + question + '_q2]>[id$=hidSelector]').val();
var v = $('[id$=' + question + '_q2]>[id$=ddlInputSelectOptions]');
setDDLData(n, v);
}
使用 Chrome,我在“var v =”行上尝试了这些变体,并得到了相应的结果:
$('[id$=' + question + '_q2]>[id$=ddlInputSelectOptions]'): d.fn.d.init[1] $('[id$=' + question + '_q2]>[ id$=ddlInputSelectOptions]').value: 未定义 $('[id$=' + question + '_q2]>[id$=ddlInputSelectOptions]').val(): ""
所以我(再一次)寻找正确的咒语来对 jQuery 说,这样它就会从 DDL 返回选定的值。