我正在asp.net中开发一个页面。我有一个带有表单的Bootstrap模态。 bootstrap模式中的表单有一个文本框和一个textarea。 bootstrapModalView。 我正在使用javascript将文本框中的每个vin#添加到vin list textarea中,然后输入。
$(document).ready(function () {
//In "Scan VINs," add VIN# to VIN List
$('#modalForm').on("keypress", function (e) {
//If "enter/return" is pressed, put vin# into vin list textarea
if (e.which == 13) {
enterModalTxtVIN();
return false;
}
});
//Hide invalidVIN div until error occurs
document.getElementById('invalidVIN').style.display = 'none';
});
//(On Modal) After clicking "enter" on VIN# textbox, VIN# goes into VIN List text area
function enterModalTxtVIN() {
var text = document.getElementById('modalTxtVIN').value;
//If modalTxtVIN length does not = 17 characters, inform user incorrect length and cancel
if (text.length != 17) {
//Show error
document.getElementById('invalidVIN').style.display = 'block';
return false;
} else {
//Hide error
document.getElementById('invalidVIN').style.display = 'none';
//Add vin# to vin list text area
document.getElementById('modalTxtAreaVINList').value += text.toUpperCase() + "\n";
document.getElementById('modalTxtVIN').value = "";
}
}
这很好很好,但我需要在后面的代码中访问textarea。所以我在我的textarea中添加了一个runat = server。
<textarea class="form-control" rows="5" id="modalTxtAreaVINList" name="modalTxtAreaVINList" runat="server" readonly ></textarea>
但是当我添加runat = server时,访问textarea的这行javascript会在我现在点击进入时关闭模态。
document.getElementById('modalTxtAreaVINList').value += text.toUpperCase() + "\n";
如何在不使用runat = server的情况下使模式不关闭,或者如何在没有runat = server的情况下从代码隐藏中访问数据?
答案 0 :(得分:0)
添加runat=server
后,您在JavaScript中看到的textarea的ID将不再是modalTxtAreaVINList
。当ASP.NET处理.aspx / .ascx文件以生成HTML时,它将为服务器端控件 ClientIDs 生成新的ID。因此document.getElementById
将无法找到您的文本框。
两种解决方案:
1)使用<%= modalTxtAreaVINList.ClientID %>
在JavaScript代码中打印“真实”ID,即实际出现在HTML中的ID,例如
document.getElementById('<%= modalTxtAreaVINList.ClientID %>')
2)或者,将ClientIDMode="Static"
添加到textarea,以强制ASP.NET输出您输入的相同ID。