这是我第一次尝试将javascript整合到我的webapp中而不是其他一个固定脚本。
我在ASP.net VB中有一个webform。在表单上我有一个复选框,当选中该复选框时,我希望它提示用户输入数量,然后我希望它从表单加载数据库查询中填充的另一个文本框中的数量中减去该数量。我的taqty没有从txtQtyAcc获取数量,错误无法获取属性的值'值':对象为空或未定义。我也看到错误未定义的计算数量haqty变量。我不确定我错过了什么。我没有找到解决方案,检查了所有类似的问题。
var taqty = document.getElementById('<%= txtQtyAcc.ClientId %>').value;
var rejqty = prompt("Enter Reject Qty", "0");
var haqty = taqty.value - rejqty;
function rQty() {
if (rejqty != null) {
document.getElementById('<%= txtQtyRej.ClientID %>') = rejqty.value.toString;
taqty.value = haqty.value.toString
}
}
我从后面的代码中为checkbox.checkedchanged事件调用脚本。
ScriptManager.RegisterClientScriptBlock(Me.Page, GetType(String), "rQtyFunction", "rQty();", True)
答案 0 :(得分:0)
使用以下内容。
ScriptManager.RegisterStartupScript(Me.Page, GetType(String), "rQtyFunction", "rQty();", True)
。
注意我已使用RegisterStartupScript
代替RegisterClientScriptBlock
。如果您使用前RegisterStartupScript
,它会将所有脚本放到</form>
标记的末尾,这意味着所有输入DOM元素将在那时添加并且可以访问,您将不会遇到此类错误你收到的,直到现在。
这使脚本能够调用或引用页面元素,而不会在页面的DOM中找不到它们。
RegisterClientScriptBlock
在script
开头添加<form>
,因此存在错误的可能性。
由于这是一个直接脚本(不是可以调用的函数,它会立即被浏览器执行。但是浏览器在这个阶段没有在Page的DOM中找到标签,因此你应该收到一个“对象”没找到“错误。
有关此用法的详细信息,请参阅此链接 - Difference between RegisterStartupScript and RegisterClientScriptBlock?