Jquery plugin disappears












0















I have created a very simple jQuery .widget plugin that I am able to use:



<script type="text/javascript">
(function( $ ) {
$.fn.widget = function () {
return this.each(function () {
let $this = $(this);
$this.load($this.attr("data-widget-source"), function (response, status, xhr) {
if (status == "error") {
const msg = "Sorry but there was an error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
});
};
}(jQuery));

$(document).ready(function () {
$('.widget').widget();
});


But when I try to use it in a code that have been loaded using .load, it seems to disappear:



$("#mymodal").load("/widget/29/", function(response, status, xhr) {
if (status === "success"){
M.FormSelect.init(document.querySelectorAll('select') , {});
// Redirect submit event
$("#slot_create_form").submit(function(e) {
ajax_submit(e)
.done(function( data, textStatus, jqXHR ) {
console.log("Slot from widget Form data received: ");
console.log(data);
$('.widget').widget(); // Here fails

}).fail(function( jqXHR, textStatus, errorThrown ) {
console.log("Form ajax error received: ");
console.log(errorThrown);
});
});
}


It fails with an error




TypeError: $(...).widget is not a function











share|improve this question




















  • 3





    The primary way plugins disappear is if the jQuery library is being included on the page more than once.

    – Taplar
    Nov 20 '18 at 17:25











  • @Taplar That was exactly what was happening. Can you put your comment as response so I can select it .

    – Nasgar
    Nov 21 '18 at 14:10











  • I can't really answer the question with that, as it's more of a comment. If you want to describe the issue fully and show how you fixed it, you could answer your own question. Otherwise it might be better if the question were closed/deleted, as on it's own it doesn't really demonstrate the issue, and I'm sure there are other existing questions talking about this issue already.

    – Taplar
    Nov 21 '18 at 14:44
















0















I have created a very simple jQuery .widget plugin that I am able to use:



<script type="text/javascript">
(function( $ ) {
$.fn.widget = function () {
return this.each(function () {
let $this = $(this);
$this.load($this.attr("data-widget-source"), function (response, status, xhr) {
if (status == "error") {
const msg = "Sorry but there was an error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
});
};
}(jQuery));

$(document).ready(function () {
$('.widget').widget();
});


But when I try to use it in a code that have been loaded using .load, it seems to disappear:



$("#mymodal").load("/widget/29/", function(response, status, xhr) {
if (status === "success"){
M.FormSelect.init(document.querySelectorAll('select') , {});
// Redirect submit event
$("#slot_create_form").submit(function(e) {
ajax_submit(e)
.done(function( data, textStatus, jqXHR ) {
console.log("Slot from widget Form data received: ");
console.log(data);
$('.widget').widget(); // Here fails

}).fail(function( jqXHR, textStatus, errorThrown ) {
console.log("Form ajax error received: ");
console.log(errorThrown);
});
});
}


It fails with an error




TypeError: $(...).widget is not a function











share|improve this question




















  • 3





    The primary way plugins disappear is if the jQuery library is being included on the page more than once.

    – Taplar
    Nov 20 '18 at 17:25











  • @Taplar That was exactly what was happening. Can you put your comment as response so I can select it .

    – Nasgar
    Nov 21 '18 at 14:10











  • I can't really answer the question with that, as it's more of a comment. If you want to describe the issue fully and show how you fixed it, you could answer your own question. Otherwise it might be better if the question were closed/deleted, as on it's own it doesn't really demonstrate the issue, and I'm sure there are other existing questions talking about this issue already.

    – Taplar
    Nov 21 '18 at 14:44














0












0








0








I have created a very simple jQuery .widget plugin that I am able to use:



<script type="text/javascript">
(function( $ ) {
$.fn.widget = function () {
return this.each(function () {
let $this = $(this);
$this.load($this.attr("data-widget-source"), function (response, status, xhr) {
if (status == "error") {
const msg = "Sorry but there was an error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
});
};
}(jQuery));

$(document).ready(function () {
$('.widget').widget();
});


But when I try to use it in a code that have been loaded using .load, it seems to disappear:



$("#mymodal").load("/widget/29/", function(response, status, xhr) {
if (status === "success"){
M.FormSelect.init(document.querySelectorAll('select') , {});
// Redirect submit event
$("#slot_create_form").submit(function(e) {
ajax_submit(e)
.done(function( data, textStatus, jqXHR ) {
console.log("Slot from widget Form data received: ");
console.log(data);
$('.widget').widget(); // Here fails

}).fail(function( jqXHR, textStatus, errorThrown ) {
console.log("Form ajax error received: ");
console.log(errorThrown);
});
});
}


It fails with an error




TypeError: $(...).widget is not a function











share|improve this question
















I have created a very simple jQuery .widget plugin that I am able to use:



<script type="text/javascript">
(function( $ ) {
$.fn.widget = function () {
return this.each(function () {
let $this = $(this);
$this.load($this.attr("data-widget-source"), function (response, status, xhr) {
if (status == "error") {
const msg = "Sorry but there was an error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
});
};
}(jQuery));

$(document).ready(function () {
$('.widget').widget();
});


But when I try to use it in a code that have been loaded using .load, it seems to disappear:



$("#mymodal").load("/widget/29/", function(response, status, xhr) {
if (status === "success"){
M.FormSelect.init(document.querySelectorAll('select') , {});
// Redirect submit event
$("#slot_create_form").submit(function(e) {
ajax_submit(e)
.done(function( data, textStatus, jqXHR ) {
console.log("Slot from widget Form data received: ");
console.log(data);
$('.widget').widget(); // Here fails

}).fail(function( jqXHR, textStatus, errorThrown ) {
console.log("Form ajax error received: ");
console.log(errorThrown);
});
});
}


It fails with an error




TypeError: $(...).widget is not a function








jquery django jquery-plugins






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 21 '18 at 15:09







Nasgar

















asked Nov 20 '18 at 17:06









NasgarNasgar

13811




13811








  • 3





    The primary way plugins disappear is if the jQuery library is being included on the page more than once.

    – Taplar
    Nov 20 '18 at 17:25











  • @Taplar That was exactly what was happening. Can you put your comment as response so I can select it .

    – Nasgar
    Nov 21 '18 at 14:10











  • I can't really answer the question with that, as it's more of a comment. If you want to describe the issue fully and show how you fixed it, you could answer your own question. Otherwise it might be better if the question were closed/deleted, as on it's own it doesn't really demonstrate the issue, and I'm sure there are other existing questions talking about this issue already.

    – Taplar
    Nov 21 '18 at 14:44














  • 3





    The primary way plugins disappear is if the jQuery library is being included on the page more than once.

    – Taplar
    Nov 20 '18 at 17:25











  • @Taplar That was exactly what was happening. Can you put your comment as response so I can select it .

    – Nasgar
    Nov 21 '18 at 14:10











  • I can't really answer the question with that, as it's more of a comment. If you want to describe the issue fully and show how you fixed it, you could answer your own question. Otherwise it might be better if the question were closed/deleted, as on it's own it doesn't really demonstrate the issue, and I'm sure there are other existing questions talking about this issue already.

    – Taplar
    Nov 21 '18 at 14:44








3




3





The primary way plugins disappear is if the jQuery library is being included on the page more than once.

– Taplar
Nov 20 '18 at 17:25





The primary way plugins disappear is if the jQuery library is being included on the page more than once.

– Taplar
Nov 20 '18 at 17:25













@Taplar That was exactly what was happening. Can you put your comment as response so I can select it .

– Nasgar
Nov 21 '18 at 14:10





@Taplar That was exactly what was happening. Can you put your comment as response so I can select it .

– Nasgar
Nov 21 '18 at 14:10













I can't really answer the question with that, as it's more of a comment. If you want to describe the issue fully and show how you fixed it, you could answer your own question. Otherwise it might be better if the question were closed/deleted, as on it's own it doesn't really demonstrate the issue, and I'm sure there are other existing questions talking about this issue already.

– Taplar
Nov 21 '18 at 14:44





I can't really answer the question with that, as it's more of a comment. If you want to describe the issue fully and show how you fixed it, you could answer your own question. Otherwise it might be better if the question were closed/deleted, as on it's own it doesn't really demonstrate the issue, and I'm sure there are other existing questions talking about this issue already.

– Taplar
Nov 21 '18 at 14:44












1 Answer
1






active

oldest

votes


















0














As @Taplar pointed, The code injected by the $("#mymodal").load() was a full THML page that have its own reference to JQuery. This was reloading JQuery and therefore deleting the plugin.



The issue was corrected using a conditional extends in Django and providing a simpler version of the page without scripts:



{% extends request.no_frame|yesno:"frameless.html,frame.html,frame.html" %}


This request attribute is set by a middleware:



class NoFrameMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.

def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
if "frame" in request.GET:
request.no_frame = {'frame': request.GET["frame"].lower() == 'false'}

response = self.get_response(request)

# Code to be executed for each request/response after
# the view is called.
return response


And the load call look like this:



$("#mymodal").load("/widget/29/?frame=False")


The frame.html is the regular page and the frameless.html is a page without headers or anything that disturbs the host page






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53398030%2fjquery-plugin-disappears%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    As @Taplar pointed, The code injected by the $("#mymodal").load() was a full THML page that have its own reference to JQuery. This was reloading JQuery and therefore deleting the plugin.



    The issue was corrected using a conditional extends in Django and providing a simpler version of the page without scripts:



    {% extends request.no_frame|yesno:"frameless.html,frame.html,frame.html" %}


    This request attribute is set by a middleware:



    class NoFrameMiddleware:
    def __init__(self, get_response):
    self.get_response = get_response
    # One-time configuration and initialization.

    def __call__(self, request):
    # Code to be executed for each request before
    # the view (and later middleware) are called.
    if "frame" in request.GET:
    request.no_frame = {'frame': request.GET["frame"].lower() == 'false'}

    response = self.get_response(request)

    # Code to be executed for each request/response after
    # the view is called.
    return response


    And the load call look like this:



    $("#mymodal").load("/widget/29/?frame=False")


    The frame.html is the regular page and the frameless.html is a page without headers or anything that disturbs the host page






    share|improve this answer




























      0














      As @Taplar pointed, The code injected by the $("#mymodal").load() was a full THML page that have its own reference to JQuery. This was reloading JQuery and therefore deleting the plugin.



      The issue was corrected using a conditional extends in Django and providing a simpler version of the page without scripts:



      {% extends request.no_frame|yesno:"frameless.html,frame.html,frame.html" %}


      This request attribute is set by a middleware:



      class NoFrameMiddleware:
      def __init__(self, get_response):
      self.get_response = get_response
      # One-time configuration and initialization.

      def __call__(self, request):
      # Code to be executed for each request before
      # the view (and later middleware) are called.
      if "frame" in request.GET:
      request.no_frame = {'frame': request.GET["frame"].lower() == 'false'}

      response = self.get_response(request)

      # Code to be executed for each request/response after
      # the view is called.
      return response


      And the load call look like this:



      $("#mymodal").load("/widget/29/?frame=False")


      The frame.html is the regular page and the frameless.html is a page without headers or anything that disturbs the host page






      share|improve this answer


























        0












        0








        0







        As @Taplar pointed, The code injected by the $("#mymodal").load() was a full THML page that have its own reference to JQuery. This was reloading JQuery and therefore deleting the plugin.



        The issue was corrected using a conditional extends in Django and providing a simpler version of the page without scripts:



        {% extends request.no_frame|yesno:"frameless.html,frame.html,frame.html" %}


        This request attribute is set by a middleware:



        class NoFrameMiddleware:
        def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

        def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        if "frame" in request.GET:
        request.no_frame = {'frame': request.GET["frame"].lower() == 'false'}

        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.
        return response


        And the load call look like this:



        $("#mymodal").load("/widget/29/?frame=False")


        The frame.html is the regular page and the frameless.html is a page without headers or anything that disturbs the host page






        share|improve this answer













        As @Taplar pointed, The code injected by the $("#mymodal").load() was a full THML page that have its own reference to JQuery. This was reloading JQuery and therefore deleting the plugin.



        The issue was corrected using a conditional extends in Django and providing a simpler version of the page without scripts:



        {% extends request.no_frame|yesno:"frameless.html,frame.html,frame.html" %}


        This request attribute is set by a middleware:



        class NoFrameMiddleware:
        def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

        def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        if "frame" in request.GET:
        request.no_frame = {'frame': request.GET["frame"].lower() == 'false'}

        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.
        return response


        And the load call look like this:



        $("#mymodal").load("/widget/29/?frame=False")


        The frame.html is the regular page and the frameless.html is a page without headers or anything that disturbs the host page







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 21 '18 at 15:06









        NasgarNasgar

        13811




        13811






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53398030%2fjquery-plugin-disappears%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

            Alcedinidae

            Origin of the phrase “under your belt”?