无法使用getElementsByName更改表单数据

时间:2015-05-24 12:37:59

标签: php javascript wordpress

我正在Wordpress上构建一个电子商务网站,供多个代理商使用。目前,该页面使用标准的PayPal链接,其中包含以下行:

<input type="hidden" name="business" value="somewhere@this-site.com">

我的理论是,我可以使用PHP从我的网站获取新用户的企业电子邮件地址,然后使用javascript更改该值。出于测试目的,我假装&#39;前者,所以使用了这段代码......

<script language="javascript">
// alert(document.getElementsByName('business').value);
document.getElementsByName('business').value='changed@paypal_address.com';
alert(document.getElementsByName('business').value);
</script>

在理论上,该页面现在应该有一个经过修改的&#34;业务&#34;领域 - 但它保持不变。所以我添加了第二个注释掉的警报......当页面被重新加载时 - 返回为&#39; undefined&#39;

我无法通过表单检查数据,因为页面上有多个(未命名的)表单(例如,没有操作字段的表单按钮用作购物车按钮中的删除项目,以及PayPal webscr表单也是未命名)

虽然代码在页脚小部件中,但我知道它正在加载/运行,因为我收到警报弹出窗口。它还在页脚加载页面时在页脚内执行PHP代码。

是否存在隐藏&#34;的限制?字段无法找到或动态更改?如果是这样,有什么工作吗? (如果所有其他方法都失败了,则必须联系UltraCart pugin团队,看看是否可以在源头设置商家名称)

2 个答案:

答案 0 :(得分:0)

试试这个:

function setValueForElementsByName(name, value) {
  var elements = document.getElementsByName(name);
  for(var e in elements) {
    elements[e].value = value;
  }
}

setValueForElementsByName('business', 'changed@paypal_address.com');

答案 1 :(得分:0)

getElementsByName返回NodeList。因此,您需要按索引访问单个项目,如

document.getElementsByName('business')[0].value

如果您希望修改具有相同名称的多个元素,只需像

一样迭代它们
var elements = document.getElementsByName('business');
for(var i=0; i < elements.length; i++){
    elements[i].value = ...;
}

document.getElementsByName('business')[0].value='changed@paypal_address.com';
alert(document.getElementsByName('business')[0].value);
<input type="hidden" name="business" value="somewhere@this-site.com">