2016-06-26 45 views
2

在模板中我有一个输入元素。无法跟踪输入值的变化

<input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption here ...' onkeypress='captionUpdate();'> 

我想跟踪输入值的变化,并启用button.Tried下面的选项更新:

  • onkeypress='captionUpdate();'
  • 试过jQuery的变化,或者点击类
$('.qq-edit-caption').change(function() { 
    alert('qq-edit-caption');   
}); 

两个选项都没有被激发!!不知道我的setu有什么问题p或Fine Uploader不允许这样做?请参阅我的screenshot

什么办法能解决这个问题,FU?

回答

0

如果您只是直接添加此联事件处理程序的模板元素,那么它并不奇怪,它永远不会触发。 Fine Uploader模板相当原始,因为模板被解释为一个HTML字符串,然后用于在容器元素(引用为your element option)中创建DOM元素。

你真的不应该使用内联事件处理程序。这种方法有很多缺点。我在书中更深入地讨论了这个问题 - Beyond jQuery。据我所知,附加事件处理程序的方法根本不需要。相反,在构建Fine Uploader的新实例之后,只需使用addEventListener将所选事件处理程序附加到输入元素即可。例如,如果你<input>元素被赋予的“QQ编辑字幕”,就可以把“变”事件处理这样的CSS类名:

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

...如果你正在创建此输入元素,并且需要将这些输入元素的“更改”处理程序附加到全部,则应该将一个委托的事件处理程序附加到容器元素,并根据最初触发该事件的元素作出反应(查看target事件的属性)。您可以通过查看event.target的父<li>的CSS类来确定文件的ID,也可以在目标元素的父<li>上查找“qq-file-id”属性(值将为文件ID)。该代码可能是这个样子:

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')) 
     // ... 
     } 
    }) 
+0

谢谢Ray。这很有道理,为什么我的代码没有触发;让我试验一下你的建议,看看我可以采取的措施。将尽快更新..... – bizready

+0

Ray的建议为我工作,但我无法从我的输入元素得到qq-file-id属性。我不得不导航出当前元素来查找更新按钮元素,然后禁用该按钮。 ex:updateButton = event.target.parentElement.parentElement.querySelector('。file-section-button'); – bizready

+0

@bizready您可以使用[getId' Fine Uploader UI方法](http://docs.fineuploader.com/branch/master/api/methods。)获取任何文件元素或文件元素子/后代元素的文件ID。 HTML#的getId)。 –

-1

您是否尝试过onchange事件?它工作吗?

<input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption here ...' onchange='captionUpdate();'> 
+0

是禁用按钮的状态,我试过的onchange()的onkeyup() ....但没有运气! – bizready

0

这可能让你开始:

$('.inp input').keyup(function(){ 
 
    if (this.value.length > 0) { 
 
    $(this).closest('.row').find('.cell.btn button.upload').prop('disabled', false); 
 
    }else{ 
 
    $(this).closest('.row').find('.cell.btn button.upload').prop('disabled', true); 
 
    } 
 
});
* {position:relative;box-sizing:border-box;} 
 
.row{overflow:hidden;} 
 
    .cell{float:left;height:40px;} 
 
    .pic{width:82px;} 
 
    .inp{width:230px;} 
 
     .inp input{font-size:1rem;padding:2px 5px;} 
 
    .btn{width:60px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="row"> 
 
    <div class="cell pic"> 
 
    <img src="http://lorempixel.com/80/40"> 
 
    </div> 
 
    <div class="cell inp"> 
 
    <input class='qq-edit-caption-selector qq-edit-caption kk-editing' placeholder='Enter Caption...'> 
 
    </div> 
 
    <div class="cell btn"> 
 
    <button class="upload" disabled>Upload</button> 
 
    </div> 
 
    <div class="cell btn"> 
 
    <button class="del" disabled>Delete</button> 
 
    </div> 
 
</div><!-- .row -->

+0

这将不起作用 - 您必须使用双反斜杠转义选择器字符串中的保留字符(例如点)。 –

+0

@Gibberish - 感谢他对工作代码的详细回应。我在我的项目设置中尝试了相同的方法,但它不起作用,这意味着,我的本地环境可能存在问题,或者可能与File Uploader平台/库存在某种冲突。 – bizready

+0

@RayNicholus - 你用'双反斜杠'选择字符串中的转义保留字符是什么意思? – bizready

0

您可以启用和通过输入value.Using的KEYUP功能

$('.qq-edit-caption').keyup(function() { 
     if(this.value.length > 0){ 
      $("#edit").prop('disabled', false); 
     } 
     else { 
     $("#edit").prop('disabled', true); 
     } 
    }); 
+0

你好!我认为这里的主要问题是选择输入元素。尽管它根本不明显 - 问题在于OP在将库添加到DOM之前试图选择元素。我详细解释了为什么这可能发生在我的答案中。但我会承认 - 我不确定OP是否需要keyup或在这种情况下作为事件处理程序更改。前者_may_可能更合适,但也许更改事件处理程序可能更适合防止代码在每个按键上不必要地执行。 –