【问题标题】:Replace input value .val() with jQuery用 jQuery 替换输入值 .val()
【发布时间】:2012-07-30 10:02:20
【问题描述】:

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

这里还有代码 -

HTML -

<b style="float: left; margin-right: 10px;">category 1</b><input type="checkbox" value="category1" style="float: left;" class="portfolio-category" /><br />
<b style="float: left; margin-right: 10px;">category 2</b><input type="checkbox" value="category2" style="float: left;" class="portfolio-category" /><br />
<br />
<br />
<input type="text" name="categories" id="portfolio-categories" />​

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(),是吗?

那么,还有其他建议吗?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

我会这样做:

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);
    });
});

FIDDLE

【讨论】:

  • 我会使用.change() 而不是.click() 来识别复选框的选中状态更改,这样它也适用于使用键盘的人。
  • @AnthonyGrist - 好点,编辑了它,但似乎上面的答案是 OP 所追求的!
  • @adeneo 好吧,基本上,我接受的答案与我的想法相同,根据您的答案,我需要更改一些其他代码,因此它不会起作用。无论如何,我赞成您的回答,以感谢您的帮助:)!希望你不要介意。
  • @y2ok - 感谢您的支持,任何可以帮助您解决问题的答案都是您应该接受的,这个答案会改变您的大部分代码,因此它可能不适合您,那就是完全由您决定。
【解决方案2】:

你对那个输入框中的空格有很大的问题。但我们稍后会谈到。

首先,这会起作用(如果不是因为空间问题):

在最后一个警报之前添加这一行:

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

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

但是如果你把第 4 行改成这样:

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

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

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

您的问题是您更改了变量中的值:portfolioCategories,但您尚未更新输入本身。 (注意,改变一个字符串的值,并不会改变它最初来自的输入的值)

【讨论】:

    【解决方案3】:

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2011-01-24
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多