现在 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()
在行尾查找值,但是这一切都创建了一个空条目,我无法弄清楚原因。
+++
今天下午一直在尝试模式匹配,发现了一些有趣的东西。
我使用 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>
用编程术语来说它可能是“粗鲁的”,但我更喜欢“逻辑地”工作,所以我可以看到每个阶段发生的事情,而不是使用密码速记......因为我无法掌握上面的“匹配”证明!