EasyUI Forum
September 14, 2025, 04:40:39 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: textarea (multiline-textbox) file drop [solved]  (Read 10645 times)
devnull
Sr. Member
****
Posts: 431


View Profile
« on: January 02, 2016, 07:15:06 PM »

I am trying to create a droppable textarea, where the contents of the dropped file are loaded into the textarea.

The following code will work in a non easyui-element, but how can I get this to work on a multiline textbox ?

Code:

  <input class="dropbox">

  $(".dropbox").on("dragenter",dropbox).on("drop",dropbox).on("dragleave",dropbox);
  
  function dropbox(e) {
    var me =$(this);
    e.stopPropagation(); e.preventDefault();    
    if (e.type == 'dragenter') me.addClass('over');
    else if (e.type == 'dragleave') me.removeClass('over');
    else if (e.type == 'drop') {
      var reader = new FileReader ();
      reader.onloadend = function (e) {
        me.val(this.result);
      };
      reader.readAsText (e.originalEvent.dataTransfer.files[0]);
      me.removeClass('over');
    }  
  }
« Last Edit: January 11, 2016, 04:23:07 AM by devnull » Logged

-- Licensed User --
devnull
Sr. Member
****
Posts: 431


View Profile
« Reply #1 on: January 02, 2016, 09:32:58 PM »

OK, I managed to solve this: http://jsfiddle.net/unh0y3ma/5/

You can drag and drop a text file onto the textarea and it will get populated with the contents.

However, is it possible to call an event from the html rather than from javascript, something like this:

Code:
<input id="myinp" class="easyui-textbox" data-options="multiline:true,onCreate:dropbox" style="width:200px; height:200px"/>
« Last Edit: January 02, 2016, 11:55:52 PM by devnull » Logged

-- Licensed User --
jarry
Administrator
Hero Member
*****
Posts: 2298


View Profile Email
« Reply #2 on: January 03, 2016, 09:06:16 AM »

The better way to solve this issue is to extend a new method.
Code:
<script>
$.extend($.fn.textbox.methods, {
dropbox: function(jq){
return jq.each(function(){
var target = this;
var opts = $(target).textbox('options');
opts.onDrop = opts.onDrop || function(){};
var t = $(this).textbox('textbox');
t.on('dragenter', dropbox).on('dragleave', dropbox).on('drop', dropbox);

function dropbox(e) {
var me =$(this);
e.stopPropagation(); e.preventDefault();   
if (e.type == 'dragenter') me.addClass('over');
else if (e.type == 'dragleave') me.removeClass('over');
else if (e.type == 'drop') {
var reader = new FileReader ();
reader.onloadend = function (e) {
me.focus();
me.val(this.result);
opts.onRead.call(target);
};
reader.readAsText (e.originalEvent.dataTransfer.files[0]);
me.removeClass('over');

}
  })
}
});
$(function(){
$('#myinp').textbox('dropbox');
});
</script>
<input id="myinp" class="easyui-textbox" data-options="multiline:true,onRead:onRead" style="width:200px; height:200px"/>

Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!