我正在处理一个 ASP.net 页面,该页面显示一个数据网格,每行都有一个复选框和一个下拉列表。要继续下一步,每一行必须选择一个检查或一个选项,但不能同时选择两者。
如果选中该复选框,我将尝试禁用下拉列表,如果选择了“选择原因”以外的任何选项,则禁用该复选框。我正在尝试使用 jquery 1.4 做所有客户端的事情(我知道它很旧,但这是 UI 主导的决定)。
我的代码在 Chrome 和 IE8 中运行良好,但是当我使用 Firefox 16 时,复选框不会在选择更改时禁用,直到用户在网格外单击。然后该框禁用。我想摆脱额外的点击。
这是网格标记:
<asp:GridView ID="gvApps" runat="server" CssClass="sGrid"
HorizontalAlign="Center" AutoGenerateColumns="False"
EmptyDataText="No Data" PageSize="3"
ShowHeaderWhenEmpty="True" >
<Columns>
<asp:TemplateField HeaderText="Select">
<itemtemplate>
<asp:checkbox id = "gvCheckbox" runat="server" onclick="RowCheckChanged(this)" />
</itemtemplate>
</asp:TemplateField>
<asp:BoundField datafield="FiscalYear" HeaderText="Year" />
<asp:TemplateField HeaderText="Reason">
<itemtemplate>
<asp:DropDownList id = "ddlReason" Viewstate="true" DataSource="<%# ReasonsList %>" runat="server" />
</itemtemplate>
</asp:TemplateField>
</Columns>
<emptydatatemplate>
<p class="norecords">There are currently no Records </p>
</emptydatatemplate>
</asp:GridView>
这是我的 OnReady:
<script type="text/javascript">
$(function () {
$("select").change(function () {
$(IndexChanged(this));
});
})
</script>
下面是 IndexChanged 和 RowCheckChanged 函数:
<script type="text/javascript">
function RowCheckChanged(objRef) {
var row = objRef.parentNode.parentNode;
if (objRef.checked) {
$(row).find("select").attr("selectedIndex", 0);
$(row).find("select")[0].disabled = true;
}
else {
$(row).find("select")[0].disabled = false;
}
}
function IndexChanged(objRef) {
//toggle chkb enabled-ness
var row = objRef.parentNode.parentNode;
if ($(row).find("select option:selected").text() == "Select a Reason") {
//both objects should be enabled
$(row).find(":checkbox").attr("disabled", false);
} else {
//a selection has been made, disable checkbox.
$(row).find(":checkbox").attr("disabled", true);
}
}
</script>
有任何想法吗?
编辑:这是网格客户端生成的标记(每个萤火虫):
<select id="MainContent_wiz_IntraAppYears1_gvApps_ddlReason_0" viewstate="true" name="ctl00$MainContent$wiz$IntraAppYears1$gvApps$ctl02$ddlReason" disabled="">
<option value="Select a Reason" selected="selected">Select a Reason</option>
<option value="Tax Exempt">Tax Exempt</option>
<option value="Out of Business">Out of Business</option>
<option value="Worked under Another Authority">Worked under Another Authority</option>
</select>