jQuery使用JavaScript更改后获取输入值
我有以下问题: 我需要附加一个值为的字段,但JavaScript无法识别或读取输入字段中的值 jQuery“on”方法无法识别字段中的值 我怎样才能解决这个问题。单击列表项应附加到输入字段内的值 例如: JS: HTML:jQuery使用JavaScript更改后获取输入值,javascript,jquery,html,Javascript,Jquery,Html,我有以下问题: 我需要附加一个值为的字段,但JavaScript无法识别或读取输入字段中的值 jQuery“on”方法无法识别字段中的值 我怎样才能解决这个问题。单击列表项应附加到输入字段内的值 例如: JS: HTML: 猴子 象 狮子 使用val()方法代替html(): 使用val()方法而不是html(): 使用val()方法而不是html(): 使用val()方法而不是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文档也表示要避免这种情况)。理想的情况是尽可能使用作用域最接近的父级,幸运的是您已经在.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()
,只是提供了一些额外的