javascript怎么访问动态生成表单中的对象?
天蓬老师
天蓬老师 2017-04-10 13:09:25
[JavaScript讨论组]

我生成动态表单的javascript代码如下:

function showFormC(){
  field = document.getElementById('hideForm');
  button = document.getElementById('toggle');
  if(formcShowed == false){
    field.innerHTML = "<form onsubmit='return validate(this)' name='form_c' method='post'>";
    field.innerHTML += "<input type='text' name='sex' />";
    field.innerHTML += "<input type='submit'/>";
    field.innerHTML += "</form>";
    formcShowed = true;
    button.value = 'Hide form c';
  }
  else {
    field.innerHTML = "";
    formcShowed = false;
    button.value = 'Show form c';
  }
}

上述代码的意图是当点击按钮时,如果表单已经显示就隐藏它,如果隐藏就显示它,其中 formcShowed 是一个全局变量。

我的 validate 函数如下:

function validate(form){
  if(form === document.form_a){
    ... ...
  }
  else if(form === document.forms['form_b']){
    ... ...
  }
  else if(form === document.form_c){
    sexvalue = form.sex.value;
    if(sexvalue == null || sexvalue == ""){
      alert('sex can not be empty!');
      form.sex.focus();
      return false;
    }
    return true;
  }
}

对于静态生成的form_a和form_b,validate的功能可以正确执行,但对form_c,根本没反应。

我在进入validate函数时,就用 alert(form.name); 显示表单名字,可是点击form_c的提交按钮时,连表单名字也不显示。

我还试着用 getElementId 来引用动态表单中的对象,也没有反应。

请教:动态表单中的对象如何引用呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
怪我咯

关于标题访问动态生成元素,请先看此答案:http://segmentfault.com/q/1010000000180139#a-1020000000180154 有什么不懂的再提出来吧。

答案增补:

<form name="static" target="result" onsubmit="return validate(this);">
    <p>username: <input type="text" name="user" /></p>
    <p>password: <input type="password" name="pass" /></p>
    <p><input type="submit" value="OK" /></p>
</form>
<iframe id="result" src="http://google.com" width="0" height="0"></iframe>

<style type="text/css">
.display {display:none;}
</style>
<script>
/*表单验证函数*/
function validate(form) {
    alert(form.name);
    if(form.className.indexOf('display') == -1) {
        form.className = "display";
    } else {
        form.className = ""
    }
}
/*动态创建元素*/
var dynamic = window.document.createElement('form');
dynamic.setAttribute('name', 'dynamic');
dynamic.setAttribute('target', 'result');
dynamic.setAttribute('onsubmit', 'return validate(this)');
dynamic.innerHTML = '<p> email: <input type="email" name="email" /></p>';
dynamic.innerHTML += '<p> password: <input type="password" name="pwd" /></p>';
dynamic.innerHTML += '<p> <input type="submit" value="OK" /></p>';
var body = document.getElementsByTagName('body')[0];
body.appendChild(dynamic);

/*访问动态元素*/
console.log(document.querySelectorAll('form[name="dynamic"] input'));


</script>

因为涉及到隐藏表单,所以我把表单的提交都指向到一个框架去,这样不会造成页面的刷新问题。jsfiddle好像不支持这种功能,所以只能放代码你自己另存成网页试试效果了。
另外动态元素绑定事件用绑定函数的方法的话是没有问题的,起码我这里测试正常。关于获取动态生成元素这个问题,其实只要注意在元素生成之后获取应该就没有问题了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号