我在一个变量中包装了一个插件实例,我试图破坏创建的实例。我尝试使用以下代码来销毁它,但它不起作用并且给出了test1.remove is not a function
的错误。
请让我知道如何销毁它:
var test = (function() {
$( "#" + id ).eip( "save.php", {
form_type: "textarea"
});
});
test1 = new test();
test1.remove();
此外,还没有使用test1 = new test();
:
$( "#" + id ).eip( "save.php", {
form_type: "textarea"
});
完整代码:
$(document.body).on("click", ".editq", function () {
var id = $(this).attr('editit');
var test = function() {
return $( "#" + id ).eip( "save.php", {
form_type: "textarea"
} );
};
test1 = test();
//test1.remove();
$("span.jeip-editor").remove();
$( "#" + id ).click();
return false;
});
答案 0 :(得分:2)
几点说明:
您已经说过“我已经在变量中包装了一个插件实例,而我正在尝试销毁已创建的实例”,但您的代码正在查找现有元素,调用插件在它上面,然后删除元素。通常,如果插件具有“创建/销毁”使用方式,它实现了一个名为“destroy”的插件“方法”,您将使用它而不是删除元素。 (但这取决于插件。)例如:
// Destroy the eip plugin stuff attached to the element
someElement.eip("destroy"); // Assumes `eip` works this way, as many but not all do
但是如果您需要实际删除元素,.remove()
是正确的方法。
new test()
尝试将test
函数作为构造函数函数调用,但它看起来不像是一个(除了没有)一个return
)。
只需使用普通功能,添加必要的return
,然后在不new
的情况下调用它:
var test = function() {
return $( "#" + id ).eip( "save.php", {
form_type: "textarea"
} );
};
test1 = test();
test1.remove();
请注意,上面假设eip
插件返回jQuery对象进行链接,就像大多数(但不是全部)jQuery函数和插件一样。如果没有:
var test = function() {
var element = $( "#" + id );
element.eip( "save.php", {
form_type: "textarea"
} );
return element;
};
我不知道代码中id
来自何处,但我认为你在某个地方有一个,或者在尝试使用它时你会得到ReferenceError
。 FWIW,我会把它作为函数的参数,但我不知道这段代码的整体上下文......
我还假设你已经在某个地方声明了test1
变量。如果你没有,那么在严格模式下你将获得ReferenceError
并且在松散模式下你将成为The Horror of Implicit Globals的牺牲品。
旁注:我通常更喜欢函数声明到函数表达式(虽然函数表达式经常非常有用)。所以如果是我,我可能会这样做:
function test() {
// ...stuff here...
}
而不是
var test = function() {
// ...stuff here...
};