无法在javascript中通过id获取值Textbox

时间:2011-03-09 13:45:11

标签: c# javascript asp.net

我有文本框,它有值可以说。我在一个文本框'onblur'上调用我的javascript方法。我的职责是:

function CalculateExpectedProductPrice() {
  alert("hi i called");
  var originalPrice = document.getElementById('hdnSelectedProductPrice').value;

  var numberOfLicenses = document.getElementById('txtNumberOfLicense').value;
  var enteredAmount = document.getElementById('txtAmount').value;

  alert(originalPrice);
  alert(numberOfLicenses);
  alert(enteredAmount);

}

我收到警告信息为“”我打电话给你。“但不是更远。”

但有些我没有得到这些控制的价值。

* 已编辑: * 我的HTML是:

<asp:HiddenField ID="hdnSelectedProductPrice" runat="server" />
<asp:TextBox ID="txtAmount" runat="server" Width="250px"></asp:TextBox>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:TextBox ID="txtNumberOfLicense" runat="server" Width="35px" ></asp:TextBox>
   </ContentTemplate>
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="txtNumberOfLicense" EventName="" />
   </Triggers>
</asp:UpdatePanel>

是否有任何影响主内容页面。因为脚本在内容页面和html也在同一内容页面上。也让我知道你,我使用向导控制,因为所有这些控件都驻留在向导的第二步。会产生什么影响吗?

编辑:

我认为巫师控制在这里很重要。当我启动我的firebug并查看生成的html时,它会动态地将Id分配给向导内的控件。这就是为什么javascript无法找到预期的控件。 例如,对于txtAmount文本框,它位于向导控件内,名称为:

ctl00_ContentPlaceHolder1_Wizard1_txtAmount

但当然我不想使用这个生成的Id。那么在向导控件和获取设置值中找到控制是否有任何补救措施?

5 个答案:

答案 0 :(得分:4)

获取控件的ID,如下所示

var enteredAmount = document.getElementById('<%=txtAmount.ClientId%>').value;

答案 1 :(得分:1)

由于您没有引用HTML(!),因此无法确定,但通常的原因是idname属性之间的混淆。 document.getElementByIdid属性一起使用,但人们倾向于认为它适用于输入字段上的name,但它没有(除了IE,getElementById is broken)。

(要记住的另一件事是id必须在整个页面上都是唯一的,但是查看您引用的ID,我怀疑您在这方面没问题。 )

更新:如果您使用id s:

,则有效

HTML:

<form>
  <input type='hidden' id='hdnSelectedProductPrice' value='10'>
  <input type='text' id='txtNumberOfLicense' value='2'>
  <input type='text' id='txtAmount' value='3'>
  <br><input type='button' id='theButton' value='Click Me'>
</form>

Live copy

答案 2 :(得分:0)

作为T.J.提到我们真的需要看到你的HTML代码,没有看到它可能是你正在寻找元素属性。

因此,您已经使用

查找元素
var element = document.getElementById('product');

获得元素后,您可以查询其属性

var price = element.getAttribute('price');

答案 3 :(得分:0)

如果是“ASP.net服务器控件”,那么你必须这样做:

var originalPrice = document.getElementById('<%=hdnSelectedProductPrice.ClientID %>').value;

答案 4 :(得分:0)

如果您使用Asp.Net 4.0 并且您的文本框在整个页面上是唯一的,则可以在文本框的属性中添加 ClientIDMode =“Static”

<asp:TextBox ID="txtAmount" runat="server" Width="250px" ClientIDMode="Static"></asp:TextBox>