uploadbutton.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. function KUploadButton(options) {
  2. this.init(options);
  3. }
  4. _extend(KUploadButton, {
  5. init : function(options) {
  6. var self = this,
  7. button = K(options.button),
  8. fieldName = options.fieldName || 'file',
  9. url = options.url || '',
  10. title = button.val(),
  11. extraParams = options.extraParams || {},
  12. cls = button[0].className || '',
  13. target = options.target || 'kindeditor_upload_iframe_' + new Date().getTime();
  14. options.afterError = options.afterError || function(str) {
  15. alert(str);
  16. };
  17. var hiddenElements = [];
  18. for(var k in extraParams){
  19. hiddenElements.push('<input type="hidden" name="' + k + '" value="' + extraParams[k] + '" />');
  20. }
  21. var html = [
  22. '<div class="ke-inline-block ' + cls + '">',
  23. (options.target ? '' : '<iframe name="' + target + '" style="display:none;"></iframe>'),
  24. (options.form ? '<div class="ke-upload-area">' : '<form class="ke-upload-area ke-form" method="post" enctype="multipart/form-data" target="' + target + '" action="' + url + '">'),
  25. '<span class="ke-button-common">',
  26. hiddenElements.join(''),
  27. '<input type="button" class="ke-button-common ke-button" value="' + title + '" />',
  28. '</span>',
  29. '<input type="file" class="ke-upload-file" name="' + fieldName + '" tabindex="-1" />',
  30. (options.form ? '</div>' : '</form>'),
  31. '</div>'].join('');
  32. var div = K(html, button.doc);
  33. button.hide();
  34. button.before(div);
  35. self.div = div;
  36. self.button = button;
  37. self.iframe = options.target ? K('iframe[name="' + target + '"]') : K('iframe', div);
  38. self.form = options.form ? K(options.form) : K('form', div);
  39. self.fileBox = K('.ke-upload-file', div);
  40. var width = options.width || K('.ke-button-common', div).width();
  41. K('.ke-upload-area', div).width(width);
  42. self.options = options;
  43. },
  44. submit : function() {
  45. var self = this,
  46. iframe = self.iframe;
  47. iframe.bind('load', function() {
  48. iframe.unbind();
  49. // 清空file
  50. var tempForm = document.createElement('form');
  51. self.fileBox.before(tempForm);
  52. K(tempForm).append(self.fileBox);
  53. tempForm.reset();
  54. K(tempForm).remove(true);
  55. var doc = K.iframeDoc(iframe),
  56. pre = doc.getElementsByTagName('pre')[0],
  57. str = '', data;
  58. if (pre) {
  59. str = pre.innerHTML;
  60. } else {
  61. str = doc.body.innerHTML;
  62. }
  63. // Bugfix: https://github.com/kindsoft/kindeditor/issues/81
  64. str = _unescape(str);
  65. // Bugfix: [IE] 上传图片后,进度条一直处于加载状态。
  66. iframe[0].src = 'javascript:false';
  67. try {
  68. data = K.json(str);
  69. } catch (e) {
  70. self.options.afterError.call(self, '<!doctype html><html>' + doc.body.parentNode.innerHTML + '</html>');
  71. }
  72. if (data) {
  73. self.options.afterUpload.call(self, data);
  74. }
  75. });
  76. self.form[0].submit();
  77. return self;
  78. },
  79. remove : function() {
  80. var self = this;
  81. if (self.fileBox) {
  82. self.fileBox.unbind();
  83. }
  84. // Bugfix: [IE] 上传图片后,进度条一直处于加载状态。
  85. //self.iframe[0].src = 'javascript:false';
  86. self.iframe.remove();
  87. self.div.remove();
  88. self.button.show();
  89. return self;
  90. }
  91. });
  92. function _uploadbutton(options) {
  93. return new KUploadButton(options);
  94. }
  95. K.UploadButtonClass = KUploadButton;
  96. K.uploadbutton = _uploadbutton;