Javascript executed after the load of a PartialView via ajax in a JQuery Dialog works only once -


i know it's long title ^^

i'm using mvc 4 , jquery version 1.8.2.

i'm loading partialview in jquery dialog , works fine.

recently wanted add javascript, hide textbox in dialog, , here starts pain.

the javascript hide code works :

  • only once, if close dialog $(this).dialog('close');
  • everytime, if close dialog $(this).remove();

i'm not expert in jquery / javascript i'd understand what's going on :)

here's code :

$(function dialoglink() {  // don't allow browser caching of forms $.ajaxsetup({ cache: false });  // wire click event of current or future dialog links $('.dialoglink').on('click', function () {     var element = $(this);      // retrieve values html5 data attributes of link            var dialogtitle = element.attr('data-dialog-title');     var updatetargetid = '#' + element.attr('data-update-target-id');     var updateurl = element.attr('data-update-url');      // generate unique id dialog div     var dialogid = 'uniquename-' + math.floor(math.random() * 1000)     var dialogdiv = "<div id='" + dialogid + "'></div>";      // load form dialog div     $(dialogdiv).load(this.href, function () {                  $(this).dialog({             modal: true,             height: 'auto',             width: 'auto',             resizable: false,             title: dialogtitle,             buttons: {                 "save": function () {                     // manually submit form                                            var form = $('form', this);                     $(form).submit();                 },                 "cancel": function () { $(this).dialog('close'); }                 //"cancel": function () { $(this).remove(); }             }         });          // enable client side validation         $.validator.unobtrusive.parse(this);          // setup ajax submit logic         wireupform(this, updatetargetid, updateurl);           // working once code         $('#possibleanswercontainer').hide();          $('#statisticdatatype').on('change', function (e) {             e.preventdefault();              if ($(this).val() === 'list') {                 $('#possibleanswercontainer').show();             } else {                 $('#possibleanswercontainer').hide();             }         });      });     return false; }); });  function wireupform(dialog, updatetargetid, updateurl) { $('form', dialog).submit(function () {      // not submit if form     // not pass client side validation     if (!$(this).valid())         return false;      // client side validation passed, submit form     // using jquery.ajax form     $.ajax({         url: this.action,         type: this.method,         data: $(this).serialize(),         success: function (result) {             // check whether post successful             if (result.success) {                 // close dialog                 $(dialog).dialog('close');                  // reload updated data in target div                 $(updatetargetid).load(updateurl);              } else {                 // reload dialog show model errors                                    $(dialog).html(result);                  // enable client side validation                 $.validator.unobtrusive.parse(dialog);                  // setup ajax submit logic                 wireupform(dialog, updatetargetid, updateurl);             }         }     });     return false; }); } 

// wire click event of current or future dialog links $('.dialoglink').on('click' 

that statement incorrect. on() not work .live() being once attach .live() detect dynamically added elements.

it should be.

$(document).on('click', '.dialoglink'), function(){ 

to attach future event handlers static elements named, .dialoglink.

also, replace $(document), closest static parent element, such $('#container')


Comments

Popular posts from this blog

html5 - What is breaking my page when printing? -

c# - must be a non-abstract type with a public parameterless constructor in redis -

ajax - PHP/JSON Login script (Twitter style) not setting sessions -