这是在IE中出错但在FF中工作的JavaScript(错误 - “document.getelementsbyname(...)。0.innerhtml为null或不是对象”:
var oldVal = parseInt(document.getElementsByName("outSL")[0].innerHTML); //val from DB
这是asp.net代码,我想抓住将由数据库填充的内部html:
<asp:Label ID="LabelSL" runat="server" Text="" name="outSL" style="visibility:hidden;"></asp:Label>
id是动态的,当它呈现时它看起来像这样,它是我所追求的43:
<span id="ctl00_cpMainContent_LabelSL" name="outSL" style="visibility:hidden;">43</span>
那么......我如何在IE和FF中使用相同的功能获得43?
谢谢!
答案 0 :(得分:6)
GetElementByName在不同浏览器中的功能不同。我建议你使用jQuery访问你的元素。
答案 1 :(得分:2)
如果您有.NET 4.0,那么您可以编写干净的ID,然后只使用getElementById,因为作为Carnotaurus状态,getElementByName在浏览器中的功能不同。
如果您坚持使用.NET 2.0 / 3.5,那么您可以使用jQuery通过Id,Name或许多其他选择器访问元素。
http://api.jquery.com/category/selectors/
我还写了一个库来输出一个用于.NET 2.0 / 3.5的ID的json数组。
http://awesomeclientid.codeplex.com/
http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-especially-with-net-2-0/
这会绕过所有控件runat服务器上的INamingContainer,它会输出一个数组:
<script type=”text/javascript”>
//<![CDATA[
var controls = {
"txtUserName": "ctl00_ContentPlaceHolder1_txtUserName",
"txtEmail": "ctl00_ContentPlaceHolder1_txtEmail",
"btnSubmit": "ctl00_ContentPlaceHolder1_btnSubmit"
};
//]]>
</script>
然后您可以通过ID访问元素,如下所示:
var element = document.getElementById(controls.btnSubmit);