当点击时,如何用(逗号)附加输入值?

时间:2012-09-03 09:52:29

标签: javascript jquery

我有以下HTML,

<ul class="holder" style="width: 512px;">
    <li id="pt_5uZqW99dmlgmiuCTJiPHDC9T9o2sfz0I"
    rel="test1@gmail.com"
    class="bit-box">test1@gmail.com<a href="#" class="closebutton"></a>
    </li>
    <li id="pt_9O0pMJDhtNbRgU1vNM8He8Vh9zpJ1tcE" 
    rel="test2@gmail.com"
    class="bit-box">test2@gmail.com<a href="#" 
    class="closebutton"></a>
    </li>
    <li id="pt_U8JH5E9y5w4atm4CadEPvuu3wdh3WcBx" 
    rel="test3@gmail.com" 
    class="bit-box">test3@gmail.com<a href="#"
    class="closebutton"></a></li>
    <li id="Project_update_user_id_annoninput" 
     class="bit-input">
     <input type="text" autocomplete="off" size="0" class="maininput"></li>
    </ul>


<input id="removeuser" value="" />

当我点击那个li时,我需要将li的值存储在隐藏的输入框中。 如果我点击前两个li,我需要存储像

这样的值
<input id="removeuser" value="test1@gmail.com,test2@gmail.com" />

这就是我每次点击li时都需要附加输入值。

我用了一个,

jQuery(document).ready(function(){                

       jQuery("a.closebutton").click(function(){

          jQuery("input#removeuser").val(jQuery.map(jQuery(this).parent().attr('rel')).join(","));

        });

    });

但它不起作用。我可以这样做吗?

5 个答案:

答案 0 :(得分:2)

http://jsfiddle.net/ySV6F/

jQuery(document).ready(function(){                
   jQuery("a.closebutton").click(function(){
      jQuery("input#removeuser").val(jQuery("input#removeuser").val() + "," + jQuery(this).parent().attr('rel'));
      $(this).remove();
       return false;
    });
});​

答案 1 :(得分:1)

这个小提示修复了您的问题:http://jsfiddle.net/pratik136/zVmwg/

我做的第一个更改是在<a />标记内移动您的文字。这允许您按预期单击它们。

接下来,我将JS更改为:

jQuery(document).ready(function() {
    jQuery("a.closebutton").click(function(a) {
        var v = jQuery(this).parent().attr('rel');
        var t = jQuery("input#removeuser").val();
        if (t.indexOf(v) < 0) {
            if(t.length>0){
                t += ",";
            }
            jQuery("input#removeuser").val(t + v);
        }
    });
});​

我添加了额外的检查以确保没有输入重复项,并且只在必要时才附加逗号。

答案 2 :(得分:0)

首先我建议您使用html safe rel属性

,而不是使用data-*属性(在(X)HTML中具有特定含义的特定含义) 像这样:

<li id="pt_5uZqW99dmlgmiuCTJiPHDC9T9o2sfz0I" data-email="mdineshkumarcs@gmail.com" 
class="bit-box">mdineshkumarcs@gmail.com<a href="#" class="closebutton"></a></li>

要访问此属性,只需使用jQuery $(elem).attr('data-email')

现在解决方案没有重复:

jQuery(document).ready(function(){
    jQuery("a.closebutton").click(function(){
        var value = $(this).parent().attr('data-email');
        var values = $("input#removeuser").val().split(',');
        var is_in = false;
        // already in?
        $.each(values, function(i, e){
            if(e == value) {
                is_in = true; return false; // set and exit each
            }
        });
        if (!is_in) {
            values.push(value);
            $("input#removeuser").val(values.join(','));
        }

        return false;
    });
})

答案 3 :(得分:0)

尝试:

var arr = [];
$(".closebutton").click(function(e) {
    e.preventDefault();
    var email = $(this).parent("li").attr("rel");
    if( $(this).hasClass("added") ) {
        arr= $.grep(arr, function(value) {
            return value != email;
       });
        $(this).removeClass("added");
    }
    else {
        arr.push( email );
        $(this).addClass("added");
    }
    $("input[id='removeuser']").val( arr.join(",") );
});

答案 4 :(得分:0)

我已将工作代码放在jsFiddle上,以便您可以看到它的实际效果。

jQuery(document).ready(function(){                

jQuery("a.closebutton").bind('click', function(){
    var data = $(this).parent().attr('rel');
    if($("#removeuser").val() == ""){        
        $("#removeuser").val(data);
    } else {
        $("#removeuser").val(", "+data);
    }
    $(this).parent().hide();
});

});​

此处,我点击后删除了li。我可以相信使用.toggle()函数来启用用户也可以从#removeuser中删除值。 希望这有帮助!