Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我能';t通过";至于;属性,但在Chrome中可以_Javascript_Google Chrome_Firefox_Google Closure - Fatal编程技术网

Javascript 我能';t通过";至于;属性,但在Chrome中可以

Javascript 我能';t通过";至于;属性,但在Chrome中可以,javascript,google-chrome,firefox,google-closure,Javascript,Google Chrome,Firefox,Google Closure,我有一个表单,我需要动态填充的标签(这是谷歌关闭生成的)。我在chrome中使用它,但在Firefox中尝试时,它不起作用,并且失败,出现以下错误: TypeError: this.document.getElementById(...)[$i].labels is undefined ....document.getElementById('dialog-form')[$i].labels[0].innerHTML = "$" + varNewPr... >>> this.

我有一个表单,我需要动态填充的标签(这是谷歌关闭生成的)。我在chrome中使用它,但在Firefox中尝试时,它不起作用,并且失败,出现以下错误:

TypeError: this.document.getElementById(...)[$i].labels is undefined
....document.getElementById('dialog-form')[$i].labels[0].innerHTML = "$" + varNewPr...
>>> this.document.getElementById('dialog-form')[4]
<input id="price1" type="radio" value="1" percentage="90" adoptname="90" name="price">
>>> this.document.getElementById('dialog-form')[4].labels
undefined
通过Firebug控制台检查,我发现以下错误:

TypeError: this.document.getElementById(...)[$i].labels is undefined
....document.getElementById('dialog-form')[$i].labels[0].innerHTML = "$" + varNewPr...
>>> this.document.getElementById('dialog-form')[4]
<input id="price1" type="radio" value="1" percentage="90" adoptname="90" name="price">
>>> this.document.getElementById('dialog-form')[4].labels
undefined
>this.document.getElementById('dialog-form')[4]
>>>this.document.getElementById('dialog-form')[4]。标签
未定义
但是,在chrome中使用本机调试控制台可以正常工作(value=和adoptname=的不同值是由于动态重用表单造成的)

>this.document.getElementById('dialog-form')[4]
​
>this.document.getElementById('dialog-form')[4]。标签
[​$0​​]
以下是从Google Closure编译器中产生的html表单代码:

// This file was automatically generated from basic.soy.
// Please don't edit this file by hand.

if (typeof examples == 'undefined') { var examples = {}; }
if (typeof examples.simple == 'undefined') { examples.simple = {}; }


examples.simple.adoptForm = function(opt_data, opt_ignored) {
return '<div class="adopt-general">
<div class="adopt-header">

....

<ul class="adopt-list">
<li><label>Tell me if the price drops below:</label>
<li><input type="radio" name="price" adoptname="$' + soy.$$escapeHtml(Math.round(opt_data.price * 0.9)) + '" id="price1" percentage="90" value="' + soy.$$escapeHtml(opt_data.itemNumber) + '" />
<label class="adopt-label" for="price1">$' + soy.$$escapeHtml(Math.round(opt_data.price * 0.9)) + '</label>
<input type="radio" name="price" adoptname="$' + soy.$$escapeHtml(Math.round(opt_data.price * 0.8)) + '" id="price2" percentage="80" value="' + soy.$$escapeHtml(opt_data.itemNumber) + '" />
<label class="adopt-label" for="price2">$' + soy.$$escapeHtml(Math.round(opt_data.price * 0.8)) + '</label>
<input type="radio" name="price" adoptname="$' + soy.$$escapeHtml(Math.round(opt_data.price * 0.7)) + '" id="price3" percentage="70" value="' + soy.$$escapeHtml(opt_data.itemNumber) + '" />
<label class="adopt-label" for="price3">$' + soy.$$escapeHtml(Math.round(opt_data.price * 0.7)) + '</label></ul>

    ...;

};
//此文件是从basic.soy自动生成的。
//请不要手动编辑此文件。
if(typeof examples=='undefined'){var examples={};}
if(typeof examples.simple=='undefined'){examples.simple={};}
examples.simple.adoptForm=函数(opt_数据,opt_忽略){
返回'
....
  • 如果价格下跌,请告诉我:
  • $'+soy.$$escapeHtml(Math.round(opt_data.price*0.9))+' $'+soy.$$escapeHtml(Math.round(opt_data.price*0.8))+' $'+大豆。$$escapeHtml(数学圆(opt_data.price*0.7))+'
...; };
javascript代码如下所示:

for(var $i = 0; $i < $myDialogLength; $i++){
    this.document.getElementById('dialog-form')[$i].setAttribute("value",skuNumber);
    this.document.getElementById('dialog-form')[$i].checked = false;
    if(this.document.getElementById('dialog-form')[$i].getAttribute("percentage") !== null){
        varIdNum = this.document.getElementById("dialog-form")[$i].getAttribute("percentage");
        var varNewPrice = (varIdNum*price/100);
        this.document.getElementById('dialog-form')[$i].setAttribute("adoptname",varNewPrice);            
        this.document.getElementById('dialog-form')[$i].labels[0].innerHTML = "$" + varNewPrice;
    }
....
}
for(var$i=0;$i<$myDialogLength;$i++){
this.document.getElementById('dialog-form')[$i].setAttribute(“value”,skuNumber);
this.document.getElementById('dialog-form')[$i].checked=false;
if(this.document.getElementById('dialog-form')[$i].getAttribute(“百分比”)!==null){
varIdNum=this.document.getElementById(“对话框表单”)[$i].getAttribute(“百分比”);
var varNewPrice=(变量*价格/100);
this.document.getElementById('dialog-form')[$i].setAttribute(“采用名称”,varNewPrice);
this.document.getElementById('dialog-form')[$i].labels[0].innerHTML=“$”+varNewPrice;
}
....
}

代码的最后一行是在Firefox中抛出错误。我也在使用JQuery,没有太多javascript经验,因此我为非最佳代码道歉。感谢您的帮助!

我想这意味着Firefox不支持
.labels
属性

请尝试以下方法:

document.querySelector("[for='"+ID+"']").innerHTML = "$"+varNewPrice;
只需确保
ID
是对元素ID的引用。您当前的代码非常奇怪…看起来您有多个元素具有相同的ID…

似乎:

this.document.getElementById('dialog-form')[4]
是对带有
id=“price1”…name=“price”
的输入的引用。您也可以使用以下方法获得相同的元素:

this.document.forms['dialog-form'].price
但无论如何,的接口不包含labels属性。您希望它做什么,返回关联的标签(如果有)


您需要说明您要做什么,并发布DOM的相关部分,最好是HTML。

如果返回的元素是表单,那么这些控件可以通过索引使用,因此
getElementById('formId')[0]
将引用表单中的第一个控件(如果有)。cf.
form.elements[0]
@RobG函数
getElementById
意味着一个。Get元素,而不是元素sYes,在本例中它返回一个表单元素,因此
form[n]
将返回表单中的第n个控件(在本例中是输入元素),如果没有,则返回未定义的控件。这不是一个好代码,但它“工作正常”。还不确定OP是要替换标签的全部内容,还是只替换文本(因为输入元素可能是标签的子元素或同级元素).哦,我现在明白了。好的。是的,那太糟糕了。非常感谢,那次替换使它在Firefox和IE中工作。我只是想更改标签的文本。我会再次检查,但我认为我避免了同一ID的多个元素。至于代码,非最佳是一种轻描淡写,不好和糟糕是更好的描述符。谢天谢地它将被重构和审查。再次感谢,我感谢您的帮助!感谢您的输入RobG,是的,我希望它通过标签的for=属性返回与其关联的标签。在chrome中,这似乎可行,但我猜它不是标准的。另外,通过name属性获取元素的问题是它是一组单选按钮,使三个按钮具有相同的名称。再次感谢您的时间,下次我将更清楚地了解我试图做什么。