Return true for click and continue event

Hi I have a popup control, what I am trying to do is force it to continue on the click event if the user selects the Yes button. As you continue the click event for the yes button, I'm trying to return true, but it doesn't continue as long as it just returns false.

<script type="text/javascript"> 
    $(document).ready(function() {

        $('.delete-question').click(function(e) {                   
            ret = false;    
            _this = this;

            $('#pop-up-1').popUpWindow({
                modal: true,
                blurClass: '.main-container',
                action: "open",
                buttons: [{
                    text: "Yes",
                    click: function () {

                        this.close();
                        ret = true;
                    }
                }, {
                    text: "No",
                    click: function () {
                        this.close();                                   
                    }
                }]
            }); 

            return ret;
        })  
    });
</script>

      

+3


source to share


2 answers


You cannot do this directly, but you can emit an event click

when needed, eg. something like this (not tested):



<script type="text/javascript"> 
    // global flag to track the popup state
    var popupReturn = false;

    $(document).ready(function() {

        $('.delete-question').click(function(e) {
            // when true (after Yes click only) go on returning true
            if (popupReturn) {
                popupReturn = false;
                return true;
            }
            else {
              _this = this;

              $('#pop-up-1').popUpWindow({
                  modal: true,
                  blurClass: '.main-container',
                  action: "open",
                  buttons: [{
                      text: "Yes",
                      click: function () {
                          // set global flag to true
                          popupReturn = true;
                          // emit click event where it knows that popupReturn is true
                          $(_this).click();
                          this.close();
                      }
                  }, {
                      text: "No",
                      click: function () {
                          this.close();                                   
                      }
                  }]
                });
                return false;
            }
        })  
    });
</script>

      

+2


source


You cannot return from an asynchronous event as in your case, because your "modal" doesn't really have modality in the sense that it doesn't pause code execution until a button is clicked.

This is where the callback comes up. I would wrap the modal code in a helper plugin and use it like this:



$.fn.confirmable = function(options) {

    options = $.extend({
        close: $.noop,
        dismiss: $.noop
    }, options);

    this.each(function() {
        $(this).popUpWindow({
            modal: true,
            blurClass: '.main-container',
            action: "open",
            buttons: [{
                text: "Yes",
                click: function() {
                    this.close();
                    options.close();
                }
            }, {
                text: "No",
                click: function() {
                    this.close();
                    options.dismiss();
                }
            }]
        });
    });
};


$('.delete-question').confirmable({
    close: function() {
        // ok pressed do something
    },
    dismiss: function() {
        // cancel pressed
    }
});

      

This means that your workflow should be converted to an asynchronous callback / promise based.

+2


source







All Articles