【问题标题】:Jquery checkbox on select add a name attribute and increment on more than one selection选择时的 Jquery 复选框添加名称属性并在多个选择中增加
【发布时间】:2014-06-26 21:52:51
【问题描述】:

好的,我正在使用 codeigniter、Grocery CRUD 和 Jquery 构建一个梦幻足球游戏。我有一个视图,用户从复选框中选择 15 个玩家,我将使用名称属性选择 GK1、GK2、DEF1、DEF2、DEF3、DEF4、DEF5、MID1、MID2、MID3、MID4、MID5、FWD1、FWD2 和 FWD3 和将它们的值传递给控制器​​。我的问题是,我如何为中场球员 (MID) 创建一个 javascript Jquery 代码,这样当用户单击第一个中场球员时,javascript 附加输入名称 =“MID1”,然后在选中另一个框时,它变为输入名称 = MID2" 而不更改 MID1 的名称。到目前为止,我的 javascript 正在工作,但是当我单击另一个玩家时,如果我取消选择该特定玩家的名称玩家没有删除,所有玩家的名称值也会发生变化。这是我的 JS..

<script>

    $(document).ready(function(){
        $(".gk").change(function() {
            var number=$('[class="gk"]:checked').length;
            if(this.checked) {


                $(".gk").each(function() {
                    $(".gk").attr('name',"GK"+number);
                });

            } else {
                $('.gk').attr('name', number);
            }
        });
    });

</script>

这是我的看法

 <input type="checkbox" class="gk"  value="<?=$row->playerID ?>" > <?= $row->playerID?> </input>                                                          

【问题讨论】:

  • $(".gk").each(function() { $(".gk").attr('name',"GK"+number); }); — 这会解析所有 .gk 播放器并更改每个播放器的名称。
  • @Bonatoc,如何更改单个元素,请帮助...
  • number 变量应该是什么?,现在是检查的 gk 的数量?,你也在 if 子句中声明 number,然后在 else 子句中使用它,你可能想要在 if 语句之外声明数字。
  • @AdrianForsius,感谢您在内部声明中指出 if,我已将其放在外部,如果现在当我取消选择时该问题已解决,数字会更改。你是对的,检查守门员数量的数字帐户将帮助我为 GK1 和 GK2 命名并将它们插入数据库。现在唯一的挑战是在选择时有不同的名称,例如,当只选择一个时,只有 GK1 的名称,当两个复选框都被选中时,只有 GK1 和 GK2 的名称。任何帮助我将不胜感激,再次感谢 :-)

标签: javascript jquery html codeigniter grocery-crud


【解决方案1】:

关于你的所有玩家都改名的问题,罪魁祸首可能是'.each()'。是不是应该更像:

$(".gk").change(function() {
        if(this.checked) {
            var number=$('[class="gk"]:checked').length;

            // $(".gk").each(function() {
                $(this).attr('name',"GK"+number);
            // });

【讨论】:

  • 我试过了,但我仍然得到相同的值。任何更多建议将不胜感激:-)
  • 当然,因为“this”指的是所有具有“.gk”类的元素。您需要编写一个 HTML 属性(id、name、ref...),您将在其中存储一些唯一标识符,以便您知道点击了哪个播放器。但我们不会为你编写代码......你应该暂停一会儿,想想你的应用程序的逻辑。
【解决方案2】:

除此之外,当您取消选择播放器时会遇到问题,因为您只运行在检查 $(".gk") 时更新名称的那段代码......另外,为了添加一个不同的数字,例如,您必须增加一个索引值,并将其添加到名称中,而不是变量编号,这将是所选元素的大小......最重要的是,最后一个变量“number”应该在“if”之外,否则你不会在 else 中看到它...

检查一下,看看有没有帮助

$(document).ready(function(){
    $(".gk").change(function() {
        var checked=$('[class="gk"]:checked').length;
        alert("You have "+checked+" Gks checked")
        var index = 1;
        $(".gk").each(function() {
            if($(this).prop('checked')){
                $(this).attr('name',"GK"+index);
                alert("Getting GK "+index)
                alert("this GK name is "+$(this).attr('name') 
                index++;
            }    
            else {
                $('.gk').attr('name',"");
            }
        });
    });
});

http://jsfiddle.net/xn3P9/5/

一旦您更新了名称,它就不会显示在页面检查器上。

你的最终解决方案应该是这样的:

$(document).ready(function(){
    $(".gk").change(function() {
        var index = 1;
        $(".gk").each(function() {
            if($(this).prop('checked')){
                $(this).attr('name',"GK"+index);
                index++;
            }    
            else {
                 $('.gk').attr('name',"");
            }
        });
    });
});

【讨论】:

  • 非常感谢您的帮助,警报似乎显示了我想要的内容,但不幸的是该名称没有任何价值。我尝试检查它并产生如下输出 。有什么建议吗?再次感谢您的帮助:-)
  • 得到 是我想要完成的一切......
  • 我更新了代码,有一个小错误。你有 $(".gk").attr 而不是 $(this).attr 我没有注意到.. 现在,关于检查器,一旦您更新属性名称,它就不会显示在页面检查器上,但会更新,因为您可以检查警报消息。小提琴也更新了。问候
  • 感谢您的帮助,您的代码是正确的,但我已经意识到 $(this).attr('name',"GK"+index);不起作用,这就是为什么我的表单中的名称是空的,因为我用静态值尝试过它,但它没有用。任何建议...我仍在想办法输出名称属性...非常感谢您的支持,让我们解决这个小问题:-)
【解决方案3】:

我仍然很难理解您在寻找什么,但可能与此类似:

$(document).ready(function(){
    $(".gk").change(function() {
        $(".gk:checked").each(function(index, gk) {
            //Will give each selected GK a unique name
            $(".gk:checked").attr("name", "GK"+index);
        });
    });
});

【讨论】:

  • 那个产生 ...我想要完成的是我得到不同的输入名称播放器,以便稍后我可以使用 POST 方法将它们传递给控制器​​,并将它们插入到我的数据库中,该数据库包含 15 个选定播放器的列。所以想象一下,我有来自 14 个俱乐部的 28 名守门员,而一个幻想队用户必须只选择 2 名守门员,这意味着选择的 2 名守门员将输入 GK1 和 GK2 的名称,我将使用它为特定用户创建一个幻想队。希望现在你明白了,任何建议都会出现。
  • 我编辑了我的代码,这将为每个选定的输入字段生成唯一的名称:
猜你喜欢
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多