2009-07-06 14 views
0

Mit dieser div:jQuery Dialog + ASP.NET Tasten - seltsames Verhalten

<div id="advSearchDialog" style="visibility:hidden;"> 
    <xx:search ID="searchUC" runat="server" /> 
</div> 

und eine Schaltfläche:

<input type="button" id="btnAdvSearch" value="Search" /> 

ich es in einen jQuery Dialog drehen, wo die Schaltfläche öffnet den Dialog:

$(document).ready(function() { 
    $('#advSearchDialog').dialog({ 
     autoOpen: false, 
     height: 500, 
     width: 600, 
     modal: true, 
     bgiframe: true, 
     title: 'Avanceret søgning', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
     } 
    }); 

    $('#btnAdvSearch').click(function() { 
     $('#advSearchDialog').css('visibility', 'visible'); 
     $('#advSearchDialog').dialog('open'); 
    }); 
}); 

Mit ASP.NET bekomme ich ein Problem.

Wenn ich eine andere Schaltfläche auf der ASP.NET-Seite (in einem Update-Bereich) drücken und danach auf die Schaltfläche btnAdvSearch klickt, passiert nichts. Warum das?

Vielen Dank im Voraus

Antwort

3

vielleicht die partielle Aktualisierung der Seite entfernt Ihr Click-Ereignis, schwer zu sagen, ohne dass die ganze Seite zu sehen.

die Lösungen für dieses Problem würde mit Jquery Live-Events sein http://docs.jquery.com/Events/live

hth

+1

Sie auch Ihre jQuery Dialog-Code in der Funktion pageload setzen könnte, wird dies auf jeden Teil-Postbacks von asp.net Ajax aufgerufen werden (http://www.asp.net/ ajax/documentation/live/overview/AJAXClientEvents.aspx) –

+0

Der Einsatz von Live-Events hat es geschafft. Vielen Dank, Marc. Simpel und einfach :-) –

0

Überprüfen Sie die emittierten HTML mit Firebug oder somthing ähnlich und Sie werden wahrscheinlich feststellen, dass Ihre Schaltfläche nicht mehr innerhalb der Form-Tags und ist am Ende des Body-Tags.

In Sie sind OK-Taste Rückruf Sie so etwas wie

dialogBox.appendTo($('#FormIdHere')); 

DialogBox wird eine Variable gesetzt, wie so

var dialogBox = $('#DialogDiv').dialog({ autoOpen: false }); 

Dies sollte Ihre Taste zurück in das Formular hinzufügen können.

EDIT:

Hier ist ein Code-Snippet ich vor kurzem verwendet haben (alle den Code unten abgefeuert wird bei einem Onload-Funktion aber reasonPostBack muss außerhalb der onload Funktion deklariert werden)

var button = $('input.rejectButton'); 
reasonPostBack = button.attr('onclick'); 
button.removeAttr('onclick'); 

var dialogBox = $('#ReasonDiv').dialog({ autoOpen: false, title: 'Please enter a reason', modal: true, bgiframe: true, buttons: { "Ok": function() { 

      if ($('input.reasonTextBox').val().length > 0) { 
       $(this).dialog('close'); 
       dialogBox.appendTo($('#theform')); 
       reasonPostBack(); 
      } 
      else 
      { 
        alert('You must enter a reason for rejection'); 
      } 
     } 
    } 
}); 


button.click(function() { 
    dialogBox.dialog('open'); 
    return false; 
}); 

Erste i nehmen einen Verweis auf die .Net Postbacks mit

var reasonPostBack = button.attr('onclick'); 

und halten für später dann aus der Schaltfläche das Click-Ereignis Streifen an den Pfosten zurück zu stoppen ocurring „au tomatenhaft ".Ich baue dann das Dialogfeld und füge eine anonyme Funktion für die OK-Schaltfläche hinzu. Dadurch wird mein Code ausgeführt, um zu testen, ob sich etwas in einem Textfeld befindet. Wenn dies nicht der Fall ist, wird der Benutzer einfach darauf hingewiesen.

Schließt das div

$(this).dialog('close'); 

die div bereit innerhalb der Form-Tags Fügt wieder für den Posten zurück

dialogBox.appendTo($('#theform')); 

und ruft dann die Original-Postbacks

reasonPostBack(); 

schließlich die letzte Bit des Codes

button.click(function() { 
    dialogBox.dialog('open'); 
    return false; 
}); 

fügt der .NET-Schaltfläche unseren eigenen Ereignishandler hinzu, um den Dialog zu öffnen, der zuvor instanziiert wurde.

HTH

OneShot