ASP.NET 当从 JQuery 设置时,服务器端的文本框值变为空
ASP.NET Textbox value coming empty on server side when set from JQuery
我正在从 javascript 设置 asp.net 文本框的值,然后尝试从后面的代码访问相同的值,但它是空的。我完全不知道为什么会这样。
正如某处所建议的那样,我尝试将 ASP.NET 文本框控件更改为带有 runat 服务器的输入 HTML 控件,一切都很顺利。但我很想知道为什么 asp.net 文本框会那样做。
下面是代码块:
MarkUP:
<div class="ingredient-block">
<span>
<asp:Localize ID="lblIngrQty" runat="server" Text="<%$ Resources:Resources, lblIngrQty %>"></asp:Localize></span><br>
<asp:TextBox ID="txtQty" CssClass="txtBack" Width="50px" runat="server" TabIndex="10" onchange="fnVerifyQuantityValue(this);" onfocus="fnShowQtyOnFocus(this);" onblur="fnHideKeywordWindow(this);"></asp:TextBox>
<actAjax:TextBoxWatermarkExtender ID="TeterxtBox5_TextBoxWamarkExtender" runat="server"
WatermarkText="<%$ Resources:Resources, lblIngrQty %>" Enabled="True" WatermarkCssClass="watermark1" TargetControlID="txtQty">
</actAjax:TextBoxWatermarkExtender>
</div>
Javascript
function fnShowQtyOnFocus(oQty) {
var hiddenQtyKw = fnUnEscapeXMLValue($("#<%=hdnQtyCommonKw.ClientID%>").val());
if (hiddenQtyKw.length > 1) {
var xmlCommonQty = $.parseXML(hiddenQtyKw);
$XMLCommonQTY = $(xmlCommonQty);
var keywordCollection = $XMLCommonQTY.find('Name');
var ul = document.createElement("ul");
for (index = 0; index < keywordCollection.length; index++) {
var li = document.createElement("li");
li.innerHTML = keywordCollection[index].textContent;
li.onclick = function () {
if ($("#" + oQty.id).val() == "Qty" || $("#" + oQty.id).val() == "Mängd") {
$("#" + oQty.id).val("");
$("#" + oQty.id).val(this.innerHTML);
}
else {
$("#" + oQty.id).val($("#" + oQty.id).val() + this.innerHTML);
}
};
$(ul).append(li);
}
$(".showKeyword").html("");
$(".showKeyword").show();
$(".showKeyword").append(ul);
var offset = $("#" + oQty.id).offset();
var posY = offset.top - $(window).scrollTop();
var posX = offset.left - $(window).scrollLeft();
$(".showKeyword").css("top", posY - 20);
$(".showKeyword").css("left", posX);
}
}
不要怀疑JS函数。它正在创建一个假设有 5 个 li 元素的无序列表,将该 ul 元素添加到 div 并在 txtQty 控件上方显示 div。然后用户将单击 5 个元素中的任何一个,然后我将 li 值复制到 txtQty 控件。查看 onclick 处理程序。
所以,现在当我通过按钮回传转到服务器时,我在 txtQty 中看不到任何值。
请帮忙。
谢谢
根据我的发现,问题的出现是因为我使用了扩展此文本框的 AJAX 水印控件。当我删除它时,它起作用了。
所以,我的解决方案是使用带有 runat 服务器的输入。并为水印使用 placeHolder 属性。
我正在从 javascript 设置 asp.net 文本框的值,然后尝试从后面的代码访问相同的值,但它是空的。我完全不知道为什么会这样。
正如某处所建议的那样,我尝试将 ASP.NET 文本框控件更改为带有 runat 服务器的输入 HTML 控件,一切都很顺利。但我很想知道为什么 asp.net 文本框会那样做。
下面是代码块:
MarkUP:
<div class="ingredient-block">
<span>
<asp:Localize ID="lblIngrQty" runat="server" Text="<%$ Resources:Resources, lblIngrQty %>"></asp:Localize></span><br>
<asp:TextBox ID="txtQty" CssClass="txtBack" Width="50px" runat="server" TabIndex="10" onchange="fnVerifyQuantityValue(this);" onfocus="fnShowQtyOnFocus(this);" onblur="fnHideKeywordWindow(this);"></asp:TextBox>
<actAjax:TextBoxWatermarkExtender ID="TeterxtBox5_TextBoxWamarkExtender" runat="server"
WatermarkText="<%$ Resources:Resources, lblIngrQty %>" Enabled="True" WatermarkCssClass="watermark1" TargetControlID="txtQty">
</actAjax:TextBoxWatermarkExtender>
</div>
Javascript
function fnShowQtyOnFocus(oQty) {
var hiddenQtyKw = fnUnEscapeXMLValue($("#<%=hdnQtyCommonKw.ClientID%>").val());
if (hiddenQtyKw.length > 1) {
var xmlCommonQty = $.parseXML(hiddenQtyKw);
$XMLCommonQTY = $(xmlCommonQty);
var keywordCollection = $XMLCommonQTY.find('Name');
var ul = document.createElement("ul");
for (index = 0; index < keywordCollection.length; index++) {
var li = document.createElement("li");
li.innerHTML = keywordCollection[index].textContent;
li.onclick = function () {
if ($("#" + oQty.id).val() == "Qty" || $("#" + oQty.id).val() == "Mängd") {
$("#" + oQty.id).val("");
$("#" + oQty.id).val(this.innerHTML);
}
else {
$("#" + oQty.id).val($("#" + oQty.id).val() + this.innerHTML);
}
};
$(ul).append(li);
}
$(".showKeyword").html("");
$(".showKeyword").show();
$(".showKeyword").append(ul);
var offset = $("#" + oQty.id).offset();
var posY = offset.top - $(window).scrollTop();
var posX = offset.left - $(window).scrollLeft();
$(".showKeyword").css("top", posY - 20);
$(".showKeyword").css("left", posX);
}
}
不要怀疑JS函数。它正在创建一个假设有 5 个 li 元素的无序列表,将该 ul 元素添加到 div 并在 txtQty 控件上方显示 div。然后用户将单击 5 个元素中的任何一个,然后我将 li 值复制到 txtQty 控件。查看 onclick 处理程序。
所以,现在当我通过按钮回传转到服务器时,我在 txtQty 中看不到任何值。
请帮忙。
谢谢
根据我的发现,问题的出现是因为我使用了扩展此文本框的 AJAX 水印控件。当我删除它时,它起作用了。
所以,我的解决方案是使用带有 runat 服务器的输入。并为水印使用 placeHolder 属性。