0

我有如下 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(","));

        });

    });

但它不起作用。我该怎么做?

4

5 回答 5

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;
    });
});​
于 2012-09-03T10:08:48.943 回答
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);
        }
    });
});​

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

于 2012-09-03T10:08:26.947 回答
1

尝试:

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(",") );
});
于 2012-09-03T10:12:17.007 回答
0

首先,我建议不要使用rel属性(在 (X)HTML 中带有特定标签的特定含义),而是使用 html 安全data-*属性

像这样:

<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;
    });
})
于 2012-09-03T10:11:03.510 回答
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。希望这可以帮助!

于 2012-09-03T10:21:02.673 回答