【问题标题】:how to show text box in div如何在div中显示文本框
【发布时间】:2011-06-13 10:48:34
【问题描述】:

这是我的index.php 页面。表格也在我的弹出框中以获取描述。

<form action="" method="post" onsubmit="store(this); return false">
<p>
    <input type="button" name="prev" onclick="goto(this.form, -1)" value="Previous" />
    <input type="button" name="next" onclick="goto(this.form, +1)" value="Next" />
</p>

<div>
    <noscript>Please enable JavaScript to see this form correctly</noscript>
</div>

<p>
    <input type="submit" name="submit" value="Store in database" />
</p>

这是我的 Javascript 文件 upload.js

用户选择的文件在那里。-->

var files=new Array(); 函数插入(文件列表) { 文件[files.length]=文件列表;

            var filenames=(files.valueOf());

var max = files.length; 无功电流 = 0; 函数 goto(form, pos) {

current += pos;
form.prev.disabled = current <= 0;
form.next.disabled = current >= max - 1;
var fields = form.getElementsByTagName('fieldset');
for (var i = 0; i < fields.length; i++) fields[i].style.display = 'none';

fields[current].style.display = 'block';
form['name' + current].focus();
}

函数存储(表单) {

var input = form.getElementsByTagName('input');
var data = ''; 
for (var i = 0; i < input.length; i++) {
    if (input[i].getAttribute('type') == 'text')
        data += '&' + input[i].getAttribute('name') + '=' + input[i].value;
}
data = encodeURI('n=' + max + data);
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.open('POST', 'datainsert.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('Content-length', data.length);
xhr.setRequestHeader('Connection', 'close');
xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        if (this.responseText != '')
             alert(this.responseText); 
     else {

            form.submit.value = 'Saved!';
            setTimeout(function() { form.submit.value = 'Save to database' }, 500);
        }

    }
}
xhr.send(data);

}






window.onload = function() 
{
    var form = document.forms[0];
    var container = form.getElementsByTagName('div')[0];
    container.innerHTML = '';
    for (var i = 0; i < max; i++)
        container.innerHTML += '<fieldset style="width: 250px; height: 80px;"><legend>Files of ' +(i + 1) + ' / ' + max + '</legend><input type="text" name="name' + i + '" /><br /><br /><input type="text" name="topic' + i + '" /></fieldset>';
    goto(form, 0);

}

&lt;div&gt;…&lt;/div&gt; 没有显示文本框。为什么?

【问题讨论】:

  • 首先将您的代码以格式方式放入代码块中,第二您到底想要什么?
  • 您不能在 JavaScript 中使用 goto。此外,不要像以前那样向innerHTML 添加文本;改用临时字符串并更改一次innerHTML
  • @Marcel,看看他的输入按钮 onclicks - goto 必须是一个定义的函数:function goto(form, integer) {...}。我同意这个名称不好且具有误导性,但我不认为他打算像基本语言中的 goto 那样使用它。
  • @rochal:啊,是的,你是对的。只是那个关键字在我的大脑中触发了一些自动机。
  • 您遇到什么错误?你确定max 被正确设置之前 onload 被调用?

标签: javascript


【解决方案1】:

我的直觉告诉我,您错误地传递了 max,所以它要么是未定义的,要么是 0,因此永远不会运行循环,或者您的选择器错误 - 将 ID 添加到您的元素并这样做:

<form id="myForm" action="" method="post" onsubmit="store(this); return false">
<p>
    <input type="button" name="prev" onclick="goto(this.form, -1)" value="Previous" />
    <input type="button" name="next" onclick="goto(this.form, +1)" value="Next" />
</p>

<div id="container">
    <noscript>Please enable JavaScript to see this form correctly</noscript>
</div>

<p>
    <input type="submit" name="submit" value="Store in database" />
</p>

window.onload = function() 
{
    var form = document.getElementById('myForm');
    var container = document.getElementById('container');
    container.innerHTML = '';
    var html = '';
    for (var i = 0; i < max; i++)
    {
        var ofValue = (i + 1) + ' / ' + max;
        html += '<fieldset style="width: 250px; height: 80px;">';
        html += '<legend>Files of ' + ofValue + '</legend>';
        html += '<input type="text" name="name' + i + '" /><br /><br />';
        html += '<input type="text" name="topic' + i + '" /></fieldset>';
    }
    container.innerHTML = html;

    goto(form, 0); //I am assuming this is a valid, defined method
                   //because it is also called from onclicks of Next/Prev buttons
}

【讨论】:

  • 只有每次点击我会显示两个文本框......在你的脚本中总共显示了 4 个文本框......这是一页中的 html 和 js 脚本.......但我会在弹出框中显示文本框......上面的代码不起作用......
  • @SANS:显示的框数取决于max,您没有显示它是如何声明的。再说一遍:你确定maxonload 触发之前设置正确吗?而且max不是作为参数传递的,而是一个全局变量,你不应该使用它,这是一个不好的编程习惯。
  • 我已经使用这个概念来获取每个文件的描述......如果用户将选择 10 个文件,那么每个文件每次点击分配两个文本框...... .....so max=(10)no of files(totally)i .....我已经完成了......但只有 div 问题............所以你能给我任何想法吗
  • @SANS 以及您如何以及在何处分配 max?您能否向我们展示您的代码(通过编辑您的问题)?请记住,“u”是一个字母,而不是“you”。
【解决方案2】:

id="div1"放在你的div标签里, 这将作为整个页面中 JavaScript 的标识符

<div id="dvi1">
    <noscript>Please enable JavaScript to see this form correctly</noscript>
</div>

【讨论】:

    【解决方案3】:
    <form action="" method="post" onsubmit="store(this); return false">
        <p>
            <input type="button" name="prev" onclick="goto(this.form, -1)" value="Previous" />
            <input type="button" name="next" onclick="goto(this.form, +1)" value="Next" />
        </p>
    
        <div  id="div1">
            <noscript>Please enable JavaScript to see this form correctly</noscript>
        </div>
    
    
        <p>
            <input type="submit" name="submit" value="Store in database" />
        </p>
    </form>
    
    
    
    window.onload = function() 
    {
    
        var container = documentgetElementByid("div1");
        container.innerHTML = '';
        for (var i = 0; i < max; i++)
            container.innerHTML += '<fieldset style="width: 250px; height: 80px;"><legend>Files of ' +(i + 1) + ' / ' + max + '</legend><input type="text" name="name' + i + '" /><br /><br /><input type="text" name="topic' + i + '" /></fieldset>';
        goto(form, 0);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2021-02-28
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多