在var中销毁包装的实例

时间:2014-06-18 10:56:04

标签: javascript jquery

我在一个变量中包装了一个插件实例,我试图破坏创建的实例。我尝试使用以下代码来销毁它,但它不起作用并且给出了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;
    });

1 个答案:

答案 0 :(得分:2)

几点说明:

  1. 您已经说过“我已经在变量中包装了一个插件实例,而我正在尝试销毁已创建的实例”,但您的代码正在查找现有元素,调用插件在它上面,然后删除元素。通常,如果插件具有“创建/销毁”使用方式,它实现了一个名为“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()是正确的方法。

  2. 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;
    };
    
  3. 我不知道代码中id来自何处,但我认为你在某个地方有一个,或者在尝试使用它时你会得到ReferenceError。 FWIW,我会把它作为函数的参数,但我不知道这段代码的整体上下文......

  4. 我还假设你已经在某个地方声明了test1变量。如果你没有,那么在严格模式下你将获得ReferenceError并且在松散模式下你将成为The Horror of Implicit Globals的牺牲品。


  5. 旁注:我通常更喜欢函数声明到函数表达式(虽然函数表达式经常非常有用)。所以如果是我,我可能会这样做:

    function test() {
        // ...stuff here...
    }
    

    而不是

    var test = function() {
        // ...stuff here...
    };