用jQuery替换输入值.val()

所以基本上这里是我的jsFiddle – http://jsfiddle.net/CmNFu/ 。

代码也在这里 –

HTML –

category 1
category 2


jQuery –

 jQuery(document).ready(function() { jQuery(".portfolio-category").click(function() { if(jQuery(this).is(":checked")) { jQuery("#portfolio-categories").val(jQuery("#portfolio-categories").val()+" "+jQuery(this).val()); } else { var portfolioCategories = jQuery("#portfolio-categories").val(); alert("before + "+portfolioCategories); var currentElement = jQuery(this).val()+" "; alert(currentElement); portfolioCategories = portfolioCategories.replace(currentElement, ""); alert(portfolioCategories); } }); }); 

基本上我想要实现的是,当用户选中复选框时,该值会自动添加内部输入字段(完成,它正在工作,哇哇!),但问题是当它取消选中复选框时,应该从中删除该值输入框(问题从这里开始),它不会删除任何东西。 您可以看到我尝试将val()函数分配给变量,但也没有成功。 检查我在jsFiddle上的示例以查看它的实时。

有什么建议? 我猜replace()不适用于val(),是吗?

那么,还有其他建议吗?

你在输入框中有很多空格问题。 但我们马上就会谈到这一点。

首先,这将是一种工作(如果它不是空间问题):

在最后一次提醒之前添加此行:

  jQuery("#portfolio-categories").val(portfolioCategories); 

这将起作用,但并非总是如此,因为您追加的最后一个元素后面没有空格。

但是如果你将第4行更改为:

 jQuery("#portfolio-categories").val(jQuery("#portfolio-categories").val()+jQuery(this).val()+" "); 

它会起作用,因为它在每个元素后面而不是之前添加空格。

http://jsfiddle.net/CmNFu/5/

您的问题是您更改了变量: portfolioCategories的值,但您还没有更新输入本身。 (注意,更改字符串的值,不会更改它最初输入的值)

我这样做:

 jQuery(document).ready(function() { jQuery(".portfolio-category").on('change', function() { var string = ""; $('input[type="checkbox"]').each(function() { var space = string.length>0?' ':''; string += this.checked?space+this.value:''; }); $("#portfolio-categories").val(string); }); }); 

小提琴

你需要的是将字符串portfolioCategories插回到输入中。 这些空间也造成了很多问题。 您可以使用$ .trim(str)从字符串中删除任何前导和尾随空格。 用适用的解决方案更新了你的小提琴。

http://jsfiddle.net/CmNFu/11/

希望这可以帮助。