Javascript:getElementByID不适用于Aweber表单

时间:2013-09-20 15:05:21

标签: javascript

既然Aweber已将装饰代码添加到他们的注册表单中,那么新手很难将字段数据提取到第二个脚本中。所以我设计了一个小格式,它接受“原始HTML”并输出字段名称/值。到目前为止,非常好。

<script language="javascript">
var o,a;
var c = document.getElementsByTagName('input'); 
for(var i = 0; i < c.length; i++) { 
    a = c[i].value;
    o+='<tr><td>'+c[i].name+'</td>';
    if (a !='') {
        o+='< d>'+c[i].value+'</td></tr>';
    } else { 
        o+='<td>-</td></tr>';
    }
}
document.write('<hr><table width="500px" cellpadding="5" cellspacing="0" border="1"  align="center">'+o+'</table>');
</script>

现在问题在于以下一行:

   <input type="hidden" name="redirect" value="http://www.aweber.com/thankyou-coi.htm?m=text" id="redirect_2346...46e29de3d26"/>

我以为我可以使用上面的代码,但是使用getElementById()代替getElementByTagName()来查找行末尾的值,但所有这些都是一个空条目,并且我无法弄清楚原因。

+++

尝试模式匹配这个afternnon,并找到了一些有趣的东西。

我使用innerHTML将其加载到变量(t)中,然后尝试了一个警告。 原来的行是(比如说):

<input type="hidden" name="meta_web_form_id" value="7...36681" />

在警报中变为......

<input name="meta_web_form_id" value="7...36681" type="hidden">` ie "hidden moves to end. Weird??

然后我尝试了 - 明显的语法错误 -

var x=t.match(/id=\"[0-9a-z]\"/);
var x=t.match(/id=\"+[0-9a-z]+\"/);
var x=t.match(/id=\".[0-9a-z].\"/);

尝试从“id =”读到“长号末尾(改变其字母/数字组合)

我甚至尝试过indexOf('id =')来查找数字的START ...但是我找不到从那一点开始向前工作的方法来到达下一个(“)

+++++

我现在设法“弄乱”一个工作。我不认为Stackoverflow网站主机在这里发布整个 Aweber表单是公平的,因为它是基本的两个字段注册表单(!!)的7.5K,这要归功于他们所有的CSS表格'美化'表格。所以我采取了“innerHTML”看到的部分,并将其放在下面:

<form method="post" class="af-form-wrapper" action="http://www.aweber.com/scripts/addlead.pl"  >
<div style="display: none;">
<input type="hidden" name="meta_web_form_id" value="7866...681" />
<input type="hidden" name="meta_split_id" value="" />
<input type="hidden" name="listname" value="lb-magic" />
<input type="hidden" name="redirect" value="http://www.aweber.com/thankyou-coi.htm?m=text" id="redirect_2346818daffbe9b...df846e29de3d26" />

<input type="hidden" name="meta_adtracking" value="basic_magic" />
<input type="hidden" name="meta_message" value="1" />
<input type="hidden" name="meta_required" value="name,email" />
<input type="hidden" name="meta_tooltip" value="" />
</div>
<div id="af-form-786636681" class="af-form"><div id="af-body-786636681"  class="af-body af-standards">
<div class="af-element">
<label class="previewLabel" for="awf_field-53468419">Name: </label>
<div class="af-textWrap">
<input id="awf_field-53468419" type="text" name="name" class="text" value=""  tabindex="500" />
</div>
<div class="af-clear"></div></div>
<div class="af-element">
<label class="previewLabel" for="awf_field-53468420">Email: </label>
<div class="af-textWrap"><input class="text" id="awf_field-53468420" type="text" name="email" value="" tabindex="501"  />
</div><div class="af-clear"></div>
</div>
<div class="af-element">
<label class="previewLabel" for="awf_field-53468421">passcode</label>
<div class="af-textWrap">
<input type="text" id="awf_field-53468421" class="text" name="custom passcode" value=''  tabindex="502" /></div>
<div class="af-clear"></div></div><div class="af-element">
<label class="previewLabel" for="awf_field-53468422">option</label>
<div class="af-textWrap"><input type="text" id="awf_field-53468422" class="text" name="custom option" value=''  tabindex="503" /></div>
<div class="af-clear"></div></div><div class="af-element buttonContainer">
<input name="submit" class="submit" type="submit" value="Submit" tabindex="504" />
<div class="af-clear"></div>
</div>
</div>
</div>
<div style="display: none;"><img src="http://forms.aweber.com/form/displays.htm?id=7BxsbMxsbByM" alt="" /></div>
</form>
<script type="text/javascript">
<!--
(function() {
    var IE = /*@cc_on!@*/false;
    if (!IE) { return; }
    if (document.compatMode && document.compatMode == 'BackCompat') {
        if (document.getElementById("af-form-786636681")) {
            document.getElementById("af-form-786636681").className = 'af-form af-quirksMode';
        }
        if (document.getElementById("af-body-786636681")) {
            document.getElementById("af-body-786636681").className = "af-body inline af-quirksMode";
        }
        if (document.getElementById("af-header-786636681")) {
            document.getElementById("af-header-786636681").className = "af-header af-quirksMode";
        }
        if (document.getElementById("af-footer-786636681")) {
            document.getElementById("af-footer-786636681").className = "af-footer af-quirksMode";
        }
    }
})();
-->
</script>

这是我找到表单变量的解决方案

<!-- Aweber Decoder by Chris Brown (http://www.cristofayre.com) -->

<!-- Place RAW HTML below this comment-->
<!-- Place RAW HTML above this comment-->

<script language="javascript">
var o,a,st,t,x;
t=document.body.innerHTML;   // put innerHTML into var t
st=t.indexOf('id=');         // find the start of redirect as 'id='
x=t.substr(st,t.length);     // cut off start ot t at this point, and move into x
x=x.replace(/id="/,'');      // remove the 'id="' at start of string
st=x.indexOf('"');           // find the next '"' in string
t=x.substr(0,st);            // cut x from 0 to index found above

var c = document.getElementsByTagName('input'); // finds all the <input tags
for (var i = 0; i < c.length; i++) {            // loop through all inputs
a=c[i].value;                                   // find the value of that input
o+='<tr><td>'+c[i].name+'</td>';                // write the name of that input to table cell
if(c[i].name == 'redirect'){                    // if input name is 'redirect'
o+='<td>'+t+'</td></tr>';                       // add var t to cell instead
continue;                                       // jump to next loop
}
if (a !=''){                                    // if the input value is not empty ...
o+='<td>'+c[i].value+'</td></tr>';              // put the value in table cell and end row
}
else{                                           // but if  the value is empty
o+='<td>-</td></tr>';                           // put a '-' in the table cell
}
}
document.write('<hr><table width="500px" cellpadding="5" cellspacing="0" border="1" align="center">'+o+'</table>');                     // write out the table and cell data
</script>

在编程术语中它可能是“原始的”,但我更喜欢“逻辑”工作,所以我可以看到每个阶段发生的事情而不是使用cyptic代码速记...因为我无法掌握上面的“匹配”证明!

1 个答案:

答案 0 :(得分:1)

看起来像一个拼写错误:getElementByTagName()应该是getElementsByTagName()(复数)并返回一个数组。