Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery使用JavaScript更改后获取输入值_Javascript_Jquery_Html - Fatal编程技术网

jQuery使用JavaScript更改后获取输入值

jQuery使用JavaScript更改后获取输入值,javascript,jquery,html,Javascript,Jquery,Html,我有以下问题: 我需要附加一个值为的字段,但JavaScript无法识别或读取输入字段中的值 jQuery“on”方法无法识别字段中的值 我怎样才能解决这个问题。单击列表项应附加到输入字段内的值 例如: JS: HTML: 猴子 象 狮子 使用val()方法代替html(): 使用val()方法而不是html(): 使用val()方法而不是html(): 使用val()方法而不是html(): 这里有一个稍加修改的版本,它将标记放入数组中,这样当您开始删除标记时,尾随的逗号就不

我有以下问题:

我需要附加一个值为的字段,但JavaScript无法识别或读取输入字段中的值

jQuery“on”方法无法识别字段中的值

我怎样才能解决这个问题。单击列表项应附加到输入字段内的值

例如:

JS:

HTML:


  • 猴子

  • 狮子

使用val()方法代替html():

使用val()方法而不是html():

使用val()方法而不是html():

使用val()方法而不是html():


这里有一个稍加修改的版本,它将标记放入数组中,这样当您开始删除标记时,尾随的逗号就不会留下

var tagDelimiter = ', ';
$(document).on("click", ".tagSelect a", function () {
    var $tagInput = $("input[name='tags']"),
        newTag = $(this).attr("data"),
        tagVal = $tagInput.val(),
        tagsArr = tagVal ? tagVal.split(tagDelimiter) : [];

    tagsArr.push(newTag);
    $tagInput.val(tagsArr.join(tagDelimiter));
});

这里有一个稍加修改的版本,它将标记放入数组中,这样当您开始删除标记时,尾随的逗号就不会留下

var tagDelimiter = ', ';
$(document).on("click", ".tagSelect a", function () {
    var $tagInput = $("input[name='tags']"),
        newTag = $(this).attr("data"),
        tagVal = $tagInput.val(),
        tagsArr = tagVal ? tagVal.split(tagDelimiter) : [];

    tagsArr.push(newTag);
    $tagInput.val(tagsArr.join(tagDelimiter));
});

这里有一个稍加修改的版本,它将标记放入数组中,这样当您开始删除标记时,尾随的逗号就不会留下

var tagDelimiter = ', ';
$(document).on("click", ".tagSelect a", function () {
    var $tagInput = $("input[name='tags']"),
        newTag = $(this).attr("data"),
        tagVal = $tagInput.val(),
        tagsArr = tagVal ? tagVal.split(tagDelimiter) : [];

    tagsArr.push(newTag);
    $tagInput.val(tagsArr.join(tagDelimiter));
});

这里有一个稍加修改的版本,它将标记放入数组中,这样当您开始删除标记时,尾随的逗号就不会留下

var tagDelimiter = ', ';
$(document).on("click", ".tagSelect a", function () {
    var $tagInput = $("input[name='tags']"),
        newTag = $(this).attr("data"),
        tagVal = $tagInput.val(),
        tagsArr = tagVal ? tagVal.split(tagDelimiter) : [];

    tagsArr.push(newTag);
    $tagInput.val(tagsArr.join(tagDelimiter));
});

好吧,有几件事,这主要是为了有助于良好的实践,而不仅仅是解决问题(正如@BhojendraNepal做得很好)。让我们从最后的代码开始:

var $tagsInput = $('input').filter('[name="tags"]');

$('.tagSelect').on({
    click:function(){
        var data = $(this).attr('data'),
            tags;

        if($tagsInput.val()){
            tags = $tagsInput.val() + ',';
        } else {
            tags = '';
        }

        $tagsInput.trigger('tagChange',[tags,data]);
    }
},'a');

$tagsInput.on({
    tagChange:function(e,tags,data){
        $tagsInput.val(tags + data);
    }
});
有几件事需要注意:

  • 多次引用的项将被缓存
  • .on('click')
    使用最接近的父级作为委托驱动程序,而不是
    文档
  • 输入
    值的更改已修改为在其自身的事件结构中进行,而不是在
    单击
    事件中进行
你为什么要这么做?

如果多次引用某个对象,则应该缓存它,因为jQuery需要重新查询DOM。查询DOM是JavaScript最麻烦的部分,因此最小化这一点是JavaScript性能的关键

使用事件委派有很多帮助,但是从顶层
文档
使用委派是最不有效的方法(即使jQuery文档也表示要避免这种情况)。理想的情况是尽可能使用作用域最接近的父级,幸运的是您已经在
.tagSelect
类中识别出了一个。将其用作委托驱动程序将提供相同的好处,但性能甚至更好

更改的分离更为抽象,但如果您计划将此应用程序变大,则有助于理解它。也许你会希望其他东西在未来引起价值的变化,或者你的点击功能会变得巨大,谁知道呢。通过将单击功能(设置
标记的值)与其对
输入的影响(更改
值)分开,您创建了一种更具可扩展性的代码方法,该方法由关注点分开。我相信我会让一些人说“对于这样大小的应用程序来说,这并不重要”,但这是一种很好的方法,可以让人熟悉,因为它可以在将来避免很多麻烦


只要我的两分钱。如前所述,@BhojendraNepal的答案很好,因为您的问题是使用
.html()
,而不是
.val()
,只是提供了一些额外的信息。

好吧,有几件事,这主要是为了帮助您进行良好的实践,而不仅仅是解决问题(正如@BhojendraNepal做得很好)。让我们从最后的代码开始:

var $tagsInput = $('input').filter('[name="tags"]');

$('.tagSelect').on({
    click:function(){
        var data = $(this).attr('data'),
            tags;

        if($tagsInput.val()){
            tags = $tagsInput.val() + ',';
        } else {
            tags = '';
        }

        $tagsInput.trigger('tagChange',[tags,data]);
    }
},'a');

$tagsInput.on({
    tagChange:function(e,tags,data){
        $tagsInput.val(tags + data);
    }
});
有几件事需要注意:

  • 多次引用的项将被缓存
  • .on('click')
    使用最接近的父级作为委托驱动程序,而不是
    文档
  • 输入
    值的更改已修改为在其自身的事件结构中进行,而不是在
    单击
    事件中进行
你为什么要这么做?

如果多次引用某个对象,则应该缓存它,因为jQuery需要重新查询DOM。查询DOM是JavaScript最麻烦的部分,因此最小化这一点是JavaScript性能的关键

使用事件委派有很多帮助,但是从顶层
文档
使用委派是最不有效的方法(即使jQuery文档也表示要避免这种情况)。理想的情况是尽可能使用作用域最接近的父级,幸运的是您已经在
.tagSelect
类中识别出了一个。将其用作委托驱动程序将提供相同的好处,但性能甚至更好

更改的分离更为抽象,但如果您计划将此应用程序变大,则有助于理解它。也许你会希望其他东西在未来引起价值的变化,或者你的点击功能会变得巨大,谁知道呢。通过将单击功能(设置
标记的值)与其对
输入的影响(更改
值)分开,您创建了一种更具可扩展性的代码方法,该方法由关注点分开。我相信我会让一些人说“对于这样大小的应用程序来说,这并不重要”,但这是一种很好的方法,可以让人熟悉,因为它可以在将来避免很多麻烦

只要我的两分钱。如前所述,@BhojendraNepal的答案很好,因为您的问题是使用
.html()
而不是
.val()
,只是提供了一些额外的