javascript - 如何捕获每个文本框的值(仅限 JavaScript)并显示它们?

标签 javascript jquery arrays variables

我仅使用 JavaScript 和 HTML 构建表单(业务需求 - 无服务器访问)。我有一个文本框列表,我需要从中获取值。用户可以选择填写 1 个文本框,也可以根据需要填写最多 35 个文本框。我可以为每个单独的框创建一个函数

var a = $('#a').val();
var b = $('#b').val();
var c = $('#c').val();

if (a != '' && b != '' && c != '') {
    var abc = "this is a: " + a + "this is b: " + b + "and this is c:" + c;
}

我可以为每个值的每个场景创建一个函数:

if(a != '' && b != '' && c == '') {
     var ab = "this is a: " + a + " and b: " + b + "but not c";
}

if(a != '' && b == '' && c != '') {
     var ac = "this is a: " + a + " and c: " + c + "but not b";
}

if(a != '' && b == '' && c == '') {
     var a-only = "this is a: " + a + " but not b or c";
}

if(a == '' && b != '' && c != '') {
     var bc = "this is b: " + b + " and c: " + c + " but not a";
}

这甚至不是每个场景都只有 3 个变量,但我可能有多达 35 个不同的变量,我需要为每个场景创建一个函数,这是很大的时间和空间,我想在大约 10 个之后,如果我需要的话,它会变得太困惑并且难以维护,更不用说全部 35 个了。

我觉得除了遍历每个可能的场景之外,必须有一种更有效的方法来捕获值并在它们不为空时显示它们。

我的文本框是通过单击“添加更多”按钮动态创建的

JavaScript:

 var max_fields = 35;
 var x = 0;
 $('#add').click(function(e) {
  e.preventDefault();
  if(x < max_fields){
    x++;
        var inps = $('#wrapper >div:last').data('count')+1 || 1;
        $('#wrapper').append('<div class="date-time-list" data-count="'+inps+'"><input type="text" name="date_count' + inps + '" id="date_count'+inps+'" class="inp"/><input type="text" name="time_count' + inps + '" id="time_count'+inps+'" class="inp"/><a class=remove>Remove</a><br><br></div>');
  }
 });    

 $('#wrapper').on('click' , 'a.remove' ,function(){
    var inps = $('#wrapper > div:last').data('count')-1 || 1;
    x--;
    $(this).closest('div').remove();
});

HTML:

 <tr class="list" style="line-height:1em;">
    <td>
        Please fill in the dates and times 
    </td>
    <td>
        <strong>Dates</strong> &nbsp; &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; <strong>Times</strong>
    </td>
</tr>
<tr class="list" style="line-height:1em;">
    <td>
    </td>
    <td>
        <span id="wrapper">                     
        </span>
    </td>
</tr>
<tr class="list">
    <td>
        &nbsp;
    </td>
    <td>
        <button id="add">Add More</button>
    </td>
</tr>

最佳答案

请看一下这个小片段:https://jsfiddle.net/0h52y0Ly/1/

$( document ).ready(function() {
    $('button').click(function(){
        var content = '';
        var countOfTextareasFilled = 0;
        $('textarea').each(function(){
            if ($(this).val().length){
                content += $(this).val() + '\n\n';
                countOfTextareasFilled++;
            }
        });
        alert(countOfTextareasFilled + ' text boxes have been filled. Contents are:\n\n' +content);
    });
});

它展示了一种非常通用的方法来完成您的任务。您应该能够轻松地使其适应您的需求。

编辑: 我相当确定,为您的特殊用例调整功能完美的通用解决方案是您应该自己做的事情。但它是:

https://jsfiddle.net/cb7ujmsw/

$('#evaluate').click(function(){
        var content = '';
        var data = [];
        var dateField, timeField;
        $('.date-time-list').each(function(){
            dateField = $('#date_count' + $(this).data('count'));
            timeField = $('#time_count' + $(this).data('count'));
            if (dateField.val().length && timeField.val().length){
                data.push({
                    date: dateField.val(),
                    time: timeField.val()
                }); 
            }
        });
        alert(data.length + ' complete datetimes. Data:\n\n' +JSON.stringify(data));
    });

我添加了一个 ID 为“evaluate”的按钮。其余的完全是您的代码。

关于javascript - 如何捕获每个文本框的值(仅限 JavaScript)并显示它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33713832/

相关文章:

c++ - const char* str[] 中有多少个字符串?

c++ - "int *a[5]"和 int(*a)[5]” 有什么区别?

javascript - switch 语句是否最好将选定的类添加到菜单中

javascript - 正则表达式:删除所有 HTML 标签并仅返回文本?

javascript - 如何处理 javascript 中动态更改深层嵌套对象的 'undefined' 错误

javascript - 取消选择 Bootstrap 选择选择器中的所有选定选项不起作用

php - 使用 PHP 对数组进行排序以生成多级菜单列表

javascript - 搜索部分类名,返回完整类名

jQuery Mobile 文本区域调整大小问题

jquery - yii2 : kartik-v/fileinput trigger upload on selection