我在使用 Javascript 或 Jquery 创建具有字符串计数的动态字段时遇到问题

Posted

技术标签:

【中文标题】我在使用 Javascript 或 Jquery 创建具有字符串计数的动态字段时遇到问题【英文标题】:I have an issue to create dynamic fields with string count using Javascript OR Jquery 【发布时间】:2012-06-08 08:54:51 【问题描述】:

我在使用 javascript 或 jQuery 创建具有 string 计数的动态字段时遇到问题。

简报

我想在 sting count 的帮助下创建动态字段,例如,当我在 player textfield 上写一些文本时,他们在 p1,p2,p3 上创建三个 file fields dynamicDiv 或当我在 @ 上删除一些文本时987654325@ 像这样 p1,p2 在同一时间他们只创建了两个 file fields 就是这样。

整个场景依赖keyup event

代码:

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function commasperatedCount()
    var cs_count = $('#player').val();
    var fields = cs_count.split(/,/);
    var fieldsCount = fields.length;

    for(var i=1;i<=fieldsCount;i++)
        var element = document.createElement("input");
        element.setAttribute("type", 'file');
        element.setAttribute("value", '');
        element.setAttribute("name", 'file_'+i);

        var foo = document.getElementById("dynamicDiv");
        foo.appendChild(element);
    

</script>

<form>
<label>CountPlayerData</label>
<input type="text" name="player" id="player" onkeyup="return commasperatedCount();" autocomplete="off" />
<div id="dynamicDiv"></div>

<input type="submit" />
</form>

【问题讨论】:

您知道您可以在文件输入上设置multiple 属性并以这种方式上传多个文件。尽管这样做,所有文件都将在相同的 input name 属性下上传。 【参考方案1】:
var seed = false,
    c = 0,
    deleted = false;
$('#player').on('keyup', function(e) 
    var val = this.value;
    if ($.trim(this.value)) 
        if (e.which == 188) 
            seed = false;
        
        if (e.which == 8 || e.which == 46) 
            var commaCount = val.split(/,/g).length - 1;
            if (commaCount < c - 1) 
                deleted = true;
            

        
        commasperatedCount();
     else 
        c = 0;
        deleted = false;
        seed = false;
        $('#dynamicDiv').empty();
    
);

function commasperatedCount() 
    if (deleted) 
        $('#dynamicDiv input:last').remove();
        deleted = false;
        c--;
        return false;
    
    if (!seed) 
        c++;
        var fields = '<input value="" type="file" name="file_' + c + '">';
        $('#dynamicDiv').append(fields);
        seed = true;
    
​

DEMO

【讨论】:

如果我在 keyup 事件上调用此函数,他们生成了多个文件字段,您必须尝试此代码并回复我如何解决此问题@thecodeparadox @QueryMaster 你可以用 blur 绑定它 yah 80% 它为我工作,但是当我在 textfiled 上写一些文本时,我遇到了一个问题,像这样 p1,p2 他们只生成一个字段,或者当我在像这样 p1 的文本字段上写一些文本时,p2,p3 他们只生成了 2 个字段实际上我想要当我在文本字段上写一些像这样的 p1,p2 的文本时,他们会生成两个字段如果您对此有任何想法,请回复我等待您回复 @QueryMaster 请看演示 感谢您的回复,但不幸的是,当我删除文本字段上的一些文本时,此代码中存在一个小问题,该功能无论如何都不起作用thanx【参考方案2】:
<script>
    function create(playerList) 
        try 
            var player = playerList.split(/,/);
         catch(err) 
            //
            return false;
        
        var str    = "";

        for(var i=0; i<player.length; i++) 
            str += '<input type="file" id="player-' + i + '" name="players[]" />'; 
            //you wont need id unless you are thinking of javascript validations here
        

        if(playerList=="") str=""; // just in case text field is empty ...

        document.getElementById("dynamicDiv").innerhtml = str;
    
</script>

<input id="playerList" onKeyUp="create(this.value);" /><!-- change event can also be used here -->

<form>
    <div id="dynamicDiv"></div>
</form>

【讨论】:

以上是关于我在使用 Javascript 或 Jquery 创建具有字符串计数的动态字段时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery / javascript 中使用 each() 进行迭代或循环

如何使用 javascript 或 jquery 读取 DBUnit XML

如何在jquery或javascript中设置函数调用的顺序或优先级?

如何使用 JavaScript/jQuery 按数组或对象中的多个项目进行索引?

使用 javascript 或 jquery 动态添加值到表单

如何使用 JavaScript 或 Jquery 删除输入文本上的所有内联脚本或 html 注入