我正在asp.net中开发一个页面 . 我有一个带有表单的Bootstrap模态 . bootstrap模式中的表单有一个文本框和一个textarea . bootstrapModalView . 我正在使用javascript将每个vin#从文本框添加到vin list textarea中,然后输入press .
$(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会在我现在点击enter时关闭模态 .
document.getElementById('modalTxtAreaVINList').value += text.toUpperCase() + "\n";
如何在不使用runat = server的情况下使模式不关闭,或者如何在没有runat = server的情况下从代码隐藏中访问数据?
1 回答
添加
runat=server
后,从JavaScript中可见的textarea的ID将不再是modalTxtAreaVINList
. 当ASP.NET处理.aspx / .ascx文件以生成HTML时,它将为服务器端控件ClientID生成新的ID . 所以document.getElementById
将找不到您的文本框 .两种解决方案
1)使用
<%= modalTxtAreaVINList.ClientID %>
在JavaScript代码中打印'real' id,即实际出现在HTML中的id,例如2)或者,将
ClientIDMode="Static"
添加到textarea,以强制ASP.NET输出您输入的相同ID .