错误execCommand不是函数

时间:2018-01-17 20:26:34

标签: javascript

我正在尝试使用type =" file"的输入元素上传图片。然后使用以下代码将图像附加到contenteditable fieldset:

var doc = document;
function file_upload() {
  var field = doc.getElementById("topic_details"), input = doc.body.appendChild(doc.createElement("input"));
  input.id = "blob";
  input.setAttribute("type", "file");
  input.click();
  input.addEventListener("change", function() {
    //reader.onload = function(e) { doc.getElementById("topic_details").innerHTML = "<img style='max-width: 320px; height: auto;' src='"+e.target.result+"' alt='' />"; }
    reader.onload = function(e) {
      field.execCommand("insertImage", false, e.target.result);
    }
    reader.readAsDataURL(doc.getElementById("blob").files[0]);
    input.parentNode.removeChild(input);
  }, false);
}

但是我收到了这个错误:

未捕获的TypeError:field.execCommand不是函数

3 个答案:

答案 0 :(得分:0)

首先execCommand()是一个window函数,只能在window对象或其document上调用,因此调用field.execCommand()是错误的这就是错误背后的代码:

  

未捕获的TypeError:field.execCommand不是函数

doc.getElementById()函数中未定义doc时,您调用file_upload的另一件事,检查您是否在全局范围内声明doc并且可以在file_upload中访问document {1}}功能。

注意:

请注意,声明一个指向document对象的变量是没用的,因为它总是很容易通过window访问它,并且它在m <- matrix(sample(1:20, 36, replace=TRUE), nrow=6) m[lower.tri(m)] <- t(m)[lower.tri(m)] m # [,1] [,2] [,3] [,4] [,5] [,6] # [1,] 19 20 15 6 5 14 # [2,] 20 20 20 3 18 17 # [3,] 15 20 6 5 11 3 # [4,] 6 3 5 6 9 20 # [5,] 5 18 11 9 10 2 # [6,] 14 17 3 20 2 7 范围内全局定义。

答案 1 :(得分:0)

我找到了解决方案:

function file_upload() {
  var field = doc.getElementById("topic_details"), input = doc.body.appendChild(doc.createElement("input"));
  input.id = "blob";
  input.setAttribute("type", "file");
  input.click();
  input.addEventListener("change", function() {
    reader.onload = function(e) {
      var range = doc.createRange();
      range.selectNodeContents(field);
      var sel = window.getSelection();
      sel.removeAllRanges();
      sel.addRange(range);
      doc.execCommand("insertImage", false, e.target.result);
    }
    reader.readAsDataURL(doc.getElementById("blob").files[0]);
    input.parentNode.removeChild(input);
  }, false);
}

谢谢大家的帮助.. cya

答案 2 :(得分:0)

我在测试调用document.execCommand('copy')命令的函数时遇到了相同的错误 测试document.execCommand时对我有什么帮助:

我在test.spec.ts文件顶部添加了这行代码

document.execCommand = jest.fn()

使用角度9