问题描述
||
我有一个JQuery对话框,里面有一个包含文本框的控件,我里面也有一个保存按钮。
在保存上单击“我从文本框获取值并将其传递给函数”。
问题:
每当我在文本框中更改值时,它只会获取旧值,
因此,如果原始值为2,则将其更改为20,然后单击按钮,它将获得值2。
有人对为什么这样做有任何想法吗?
谢谢!
这是一些代码:
JQUERY:
$(\"#inputupdatecontrol<%=PlantID %>\").dialog({
autoOpen: false,modal: true,width: 500,height: 400
});
HTML:
<script type=\"text/javascript\">
function SaveActivityManagementData() {
var plantid = $(\'.drpplants\').val();
var worktype = $(\'.worktype\').val();
var startdate = $(\'.startdate\').val();
var enddate = $(\'.enddate\').val();
var planid = $(\'.planid\').val();
var mob = $(\'.mob\').val();
var assignedto = $(\"input[name=txtassignedtoid]\").attr(\"value\");
var currentuserId = $(\"input[name=CurrentUserId]\").attr(\"value\");
var clientId = $(\"input[name=ClientId]\").attr(\"value\");
AjaxSaveActivityManagementData(plantid,worktype,startdate,enddate,planid,mob,assignedto,currentuserId,clientId);
}
</script>
<table>
<tr>
<td>Plant:</td>
<td><asp:DropDownList ID=\"drpPlants\" runat=\"server\" DataValueField=\"Id\" DataTextField=\"Name\" CssClass=\"drpplants\"></asp:DropDownList></td>
</tr>
<tr>
<td>Work Order:</td>
<td>
<div>
<asp:Label ID=\"lblExisiting\" runat=\"server\" Text=\"Existing\"></asp:Label>
<asp:RadioButton runat=\"server\" GroupName=\"workorder\" ID=\"rbExisting\" Checked=\"true\" />
<asp:DropDownList ID=\"DropDownList1\" runat=\"server\"></asp:DropDownList>
</div>
<div>
<asp:Label ID=\"Label1\" runat=\"server\" Text=\"New\"></asp:Label>
<asp:RadioButton ID=\"rbNew\" runat=\"server\" GroupName=\"workorder\" />
<asp:TextBox ID=\"txtnew\" runat=\"server\"></asp:TextBox>
</div>
</td>
</tr>
<tr>
<td>Work Type:</td>
<td>
<asp:DropDownList ID=\"DropDownList2\" runat=\"server\" CssClass=\"worktype\">
<asp:ListItem Text=\"non-routine\"></asp:ListItem>
<asp:ListItem Text=\"pilot project\"></asp:ListItem>
<asp:ListItem Text=\"routine\"></asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>Description:</td>
<td><asp:TextBox ID=\"txtDesc\" runat=\"server\"></asp:TextBox></td>
</tr>
<tr>
<td>Start Date:</td>
<td><asp:TextBox ID=\"txtStartDate\" runat=\"server\" CssClass=\"startdate\"></asp:TextBox></td>
</tr>
<tr>
<td>End Date:</td>
<td><asp:TextBox ID=\"txtEndDate\" runat=\"server\" CssClass=\"enddate\"></asp:TextBox></td>
</tr>
<tr>
<td>Plan ID:</td>
<td><asp:TextBox ID=\"txtPlanId\" runat=\"server\" CssClass=\"planid\"></asp:TextBox></td>
</tr>
<tr>
<td>MOB:</td>
<td><asp:TextBox ID=\"txtMOB\" runat=\"server\" CssClass=\"mob\"></asp:TextBox></td>
</tr>
<tr>
<td>Assigned To:</td>
<td>
<asp:TextBox ID=\"txtAssignedTo\" runat=\"server\" CssClass=\"assignedto\"></asp:TextBox>
<input type=\"text\" name=\"txtassignedtoid\" visible=\"false\" class=\"assignedtoid\" style=\"display:none;\" />
<input type=\"text\" name=\"CurrentUserId\" visible=\"false\" class=\"userid\" style=\"display:none;\" />
<input type=\"text\" name=\"ClientId\" visible=\"false\" class=\"clientid\" style=\"display:none;\" />
</td>
</tr>
<tr>
<td></td>
<td><asp:CheckBox runat=\"server\" ID=\"chkOverRide\" Text=\"Override\" /></td>
</tr>
<tr>
<td></td>
<td><asp:DropDownList ID=\"drpAssignment\" runat=\"server\" DataTextField=\"FirstName\" DataValueField=\"id\"></asp:DropDownList></td>
</tr>
<tfoot>
<tr>
<td></td>
<td>
<asp:Button ID=\"btnSave\" runat=\"server\" Text=\"Save\" OnClientClick=\"SaveActivityManagementData();\"/>
<asp:Button ID=\"btnDelete\" runat=\"server\" Text=\"Delete\" OnClick=\"DeleteClick\" />
<asp:Button ID=\"btnCancel\" CssClass=\"btnFormCancel\" runat=\"server\" Text=\"Cancel\" />
</td>
</tr>
</tfoot>
解决方法
我以前曾经经历过-不是使用jQuery,而是使用YUI。我相信
.val()
方法很容易在更改事件传播之前返回值-而直接访问底层DOM元素的值应该可以工作。所以代替:
var plantid = $(\'.drpplants\').val();
您会有类似以下内容:
var plantid = $(\'.drpplants\').get(0).value;
您可能需要更正第二种语法-我不确定这是访问jQuery中基础DOM节点的最佳方法...