Javascript 无法跟踪输入值的变化
在模板中,我有一个输入元素Javascript 无法跟踪输入值的变化,javascript,jquery,fine-uploader,Javascript,Jquery,Fine Uploader,在模板中,我有一个输入元素 <input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption here ...' onkeypress='captionUpdate();'> 两个选项都不会被激发!!我不确定我的设置有什么问题,或者Fine Uploader不允许这样做?请参阅我的: 有什么办法解决FU的这个问题吗?您是否尝试过onchange事件?它有用吗
<input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption here ...' onkeypress='captionUpdate();'>
两个选项都不会被激发!!我不确定我的设置有什么问题,或者Fine Uploader不允许这样做?请参阅我的:
有什么办法解决FU的这个问题吗?您是否尝试过onchange事件?它有用吗
<input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption here ...' onchange='captionUpdate();'>
您是否尝试过onchange事件?它有用吗
<input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption here ...' onchange='captionUpdate();'>
这可能会让您开始:
$('.inp input').keyup(函数(){
如果(this.value.length>0){
$(this).closest('.row').find('.cell.btn button.upload').prop('disabled',false);
}否则{
$(this).closest('.row').find('.cell.btn button.upload').prop('disabled',true);
}
});代码>
*{位置:相对;框大小:边框框;}
.row{溢出:隐藏;}
.cell{float:左;高度:40px;}
.pic{宽度:82px;}
.inp{宽度:230px;}
.inp输入{字体大小:1rem;填充:2px 5px;}
.btn{宽度:60px;}
上传
删除
这可能会让您开始:
$('.inp input').keyup(函数(){
如果(this.value.length>0){
$(this).closest('.row').find('.cell.btn button.upload').prop('disabled',false);
}否则{
$(this).closest('.row').find('.cell.btn button.upload').prop('disabled',true);
}
});代码>
*{位置:相对;框大小:边框框;}
.row{溢出:隐藏;}
.cell{float:左;高度:40px;}
.pic{宽度:82px;}
.inp{宽度:230px;}
.inp输入{字体大小:1rem;填充:2px 5px;}
.btn{宽度:60px;}
上传
删除
如果您只是简单地将此内联事件处理程序直接添加到模板元素,那么它从未被触发也就不足为奇了。精细的上传器模板非常原始,因为模板被解释为HTML字符串,然后用于在容器元素(引用为的元素)内创建DOM元素
您真的不应该使用内联事件处理程序。这种方法有很多缺点。我在书中更深入地讨论了这一点-。据我所知,在您的案例中,附加事件处理程序的方法根本不是必需的。相反,在构建Fine Uploader的新实例后,只需使用addEventListener
将您选择的事件处理程序附加到输入元素。例如,如果您的
元素有一个CSS类名“qq编辑标题”,您可以附加一个“更改”事件处理程序,如下所示:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.querySelector('.qq-edit-caption')
.addEventListener('change', function(event) {
// event handler logic here...
})
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.addEventListener('change', function(event) {
if (event.target.className.indexOf('qq-edit-caption') >= 0) {
var fileId = parseInt(event.target.getAttribute('qq-file-id'))
// ...
}
})
…如果要为每个文件创建此输入元素,并且需要将“更改”处理程序附加到所有这些输入元素,则应将单个委托事件处理程序附加到容器元素,并根据最初触发事件的元素作出反应(查看事件的target
属性)。您可以通过查看事件.target
的父级
的CSS类来确定文件的ID,也可以在目标元素的父级
上查找“qq文件ID”属性(该值将是文件ID)。该代码可能如下所示:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.querySelector('.qq-edit-caption')
.addEventListener('change', function(event) {
// event handler logic here...
})
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.addEventListener('change', function(event) {
if (event.target.className.indexOf('qq-edit-caption') >= 0) {
var fileId = parseInt(event.target.getAttribute('qq-file-id'))
// ...
}
})
如果您只是将这个内联事件处理程序直接添加到模板元素中,那么它从未被触发就不足为奇了。精细的上传器模板非常原始,因为模板被解释为HTML字符串,然后用于在容器元素(引用为的元素)内创建DOM元素
您真的不应该使用内联事件处理程序。这种方法有很多缺点。我在书中更深入地讨论了这一点-。据我所知,在您的案例中,附加事件处理程序的方法根本不是必需的。相反,在构建Fine Uploader的新实例后,只需使用addEventListener
将您选择的事件处理程序附加到输入元素。例如,如果您的
元素有一个CSS类名“qq编辑标题”,您可以附加一个“更改”事件处理程序,如下所示:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.querySelector('.qq-edit-caption')
.addEventListener('change', function(event) {
// event handler logic here...
})
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.addEventListener('change', function(event) {
if (event.target.className.indexOf('qq-edit-caption') >= 0) {
var fileId = parseInt(event.target.getAttribute('qq-file-id'))
// ...
}
})
…如果要为每个文件创建此输入元素,并且需要将“更改”处理程序附加到所有这些输入元素,则应将单个委托事件处理程序附加到容器元素,并根据最初触发事件的元素作出反应(查看事件的target
属性)。您可以通过查看事件.target
的父级
的CSS类来确定文件的ID,也可以在目标元素的父级
上查找“qq文件ID”属性(该值将是文件ID)。该代码可能如下所示:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.querySelector('.qq-edit-caption')
.addEventListener('change', function(event) {
// event handler logic here...
})
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.addEventListener('change', function(event) {
if (event.target.className.indexOf('qq-edit-caption') >= 0) {
var fileId = parseInt(event.target.getAttribute('qq-file-id'))
// ...
}
})
您可以通过输入值启用和禁用按钮的状态。使用Keyup功能
$('.qq-edit-caption').keyup(function() {
if(this.value.length > 0){
$("#edit").prop('disabled', false);
}
else {
$("#edit").prop('disabled', true);
}
});
您可以通过输入值启用和禁用按钮的状态。使用Keyup功能
$('.qq-edit-caption').keyup(function() {
if(this.value.length > 0){
$("#edit").prop('disabled', false);
}
else {
$("#edit").prop('disabled', true);
}
});
这不起作用-您必须用双反斜杠转义选择器字符串中的保留字符(如点)。@Gibberish-感谢他用工作代码给出的详细响应。我在项目设置中尝试了同样的方法,但没有起作用,这意味着,“我的本地环境可能有问题,或者可能与文件上载平台/库存在某种冲突。@RayNicholus-您所说的“用双反斜杠转义选择器字符串中的保留字符”是什么意思?例如,如果CSS类包含一个点,您必须在该点前面加上“\\”前缀。所以find('.cell.btn button.upload')
必须表示为find('.cell\\.btn button\\.upload')
这行不通-您必须用双反斜杠转义选择器字符串中的保留字符(如点)。@Gibberish-感谢他用工作代码给出了详细的响应。我在项目设置中尝试了同样的方法,但没有成功,这意味着,我的本地环境可能存在问题,或者可能与文件上载平台/库存在某种冲突。@RayNicholus-你所说的“e”是什么意思