Frage

ich jQuery bin mit einem Verfahren, wenn ein ASP.NET zu versuchen und triggern (2.0) Drop-Down-Liste der Änderungsereignis wird von jQuery behandelt. Das Problem ist, dass die Drop-Down-Liste in einer Gridview befindet und auch nur dann, wenn ein Benutzer eine Zeile innerhalb dieser Gridview zu bearbeiten hat sich entschieden.

Ich glaube, ich habe es das Objekt mit einem ASP-Code-Block Aufnehmen, aber das Problem dabei ist, dass, wenn die Seite geladen wird der Bearbeitungs Index der Zeile nicht existiert und es wirft einen Fehler. Setzen Sie den Block in einer IF Aussage auch nicht funktionieren.

$(document).ready(function() //when DOM is ready, run containing code
{
    <% if (grvTimeSheets.EditIndex > -1) {%>
        $(#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>).change(function() {
             $(#<%= grvTimeSheets.ClientID %>).block({ message: null }
        });
}
);
<% } %>

Es ist ein Versuch, den ich gemacht, und ich habe auch versucht, die IF-Anweisung ASP-Code außerhalb des JavaScript-Block setzen. Es funktioniert auch nicht.

Wie kann ich das jQuery Ereignis in der Drop-Drop-Box anwenden? Im Idealfall so kurz wie möglich.


Danke für die Antwort, aber nein, es funktioniert nicht :(. Der JavaScript-Code scheint nicht ausgegeben zu werden ... Verwirrend ...

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //When DOM is ready, run the containing code
    {

    }
    );
</script>

Ist der Ausgang. Auch wenn dies ist der Code:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //when DOM is ready, run containing code
    {<% if (grvTimeSheets.EditIndex > -1) {%>
        var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
        $(id).change(function() {
             $(id).block({ message: null }
        });
     <% } %>
    }
    );
</script>

Es wurde tun, dass sowohl vor als auch, mich verrückt.


Sorry, könnten Sie das etwas klarer machen. Ich habe versucht, die ganze Sache in Code definieren hinter etwa so:

DropDownList ddl (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    $(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
          csm.RegisterStartupScript(cstype, csname1, script, true);
}

Ist das, was Sie gemeint?

BTW, hat die oben nicht funktionieren. Keine Fehler, funktionierte einfach keine Ereignisse.

War es hilfreich?

Lösung

Ein paar Dinge hier.

  1. Sie müssen Ihre Wähler in Anführungszeichen wickeln, wenn man sich auf die $() Funktion übergeben. Der Code-Snippet erzeugt über so etwas wie $(#some-generated-id), die nicht funktionieren.
  2. Die schließende geschweifte Klammer für Ihre Server-Seite if-Anweisung außerhalb der onready Funktion war. Es muss, wenn auf der gleichen Ebene wie die Öffnung verschachtelt werden.

Versuchen Sie dieses:

$(document).ready(function() //when DOM is ready, run containing code
{
  <% if (grvTimeSheets.EditIndex > -1) {%>
      var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
      $(id).change(function() { 
           $(id).block({ message: null }
        }); 
 <% } %>
}
);

Wenn es nicht funktioniert, gehen Sie vor und fügen Sie den generierten Javascript als auch.

Andere Tipps

verwenden:

cs.RegisterClientScriptBlock(cstype, csname, cstext2.ToString(), False)

Es ist falsch, nicht die Script-Tags erstellen, da Sie sie mit. Die MSDN-Dokumentation ist falsch, wie es erklärt die Flagge.

Auch setzen nur die Client-IDs der Steuerelemente in einzelne Variablen aus dem Code hinter, nicht die jQuery Code.

Dann die Variablen verwenden, die die IDs stattdessen in jQuery-Code enthalten.

In Ihrem Skriptblock, die Sie im Code erstellen hinter:

string script = @"<script type=text/javascript> var myControlId = '" + ddl.ClientId  "';") + "</script>"

Ich habe diese Syntax nicht überprüfen, aber es sollte in der Nähe sein. Sie können die zusätzliche Syntax hinzufügen, für sich selbst grvTimeSheets.ClientID. Wenn Sie diese erhalten arbeiten dann möchten Sie vielleicht, es zu ändern, um ein JavaScript-Array zu erstellen und die auf diese Weise die ClientId speichern und dann nur Sie eine globale JavaScript-Variable, die Sie benötigen, mit zu arbeiten.

Eine andere Möglichkeit ist es, nur das Element geben Sie für einen Klassennamen suchen, die sein Verhalten beschreibt. Dann ist Ihr jQuery-Code wird wirklich klar:

$(function() {
    $("select.yourMarkerClass").change(....);
});

Wenn es keine Zeile bearbeiten, dann tut dieser Code nichts. Wenn es ein Element, das den Wähler übereinstimmt, werden Sie das neue Verhalten bekommen hinzugefügt.

Wenn Sie nicht die gleiche ID an anderer Stelle auf der Seite verwenden, können Sie ASP vereiteln. NET 's UniqueID mit einem jQuery erweiterte Selektoren:

$('[id$=ddlClients]')

Das paßt nur das Ende des ID-String, anstatt das Ganzen. Denken Sie daran, wenn die Steuerung vorhanden mehrfach in verschiedenen Reihen ist, wird dies alle Instanzen entspricht.

Siehe

Selektoren für weitere Beispiele.

Ich habe die Page.ClientScript Eigenschaft einen Skriptblock registrieren alle IDs enthalten ich mit jQuery zugreifen müssen.

Hier ist ein Beispiel für meine JavaScript in einer externen Datei:

var myFancySelector = '#' + myControlId;
selectedValue = $(myFancySelector).val();

myControlId wird aus dem Code definiert hinter und registerd im ClientScriptBlock.

kann der Schlüssel sein, was Sie wollen, es sollte jedoch eindeutig sein.

Ich werde mehr nach dem Wochenende versuchen. Dies war der Code, aber:

DropDownList ddl = (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    jQuery(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
    csm.RegisterStartupScript(cstype, csname1, script, false);

Da haben Sie eine Dropdown-Liste in jeder Zeile. Jeder Drop-Down wird eine einzigartige ClientId hat, so schlage ich vor, zu tun, was Ben vorgeschlagen und die Klassenauswahl verwenden, da es die einfachste Lösung ist.

Sie können auch eine JavaScript-Funktion auf Ihrem bearbeiten klicken erstellen und dann die eindeutige Client-ID Ihres Drop-Down in dieser Reihe erhalten, die bearbeitet wird.

Sorry, ich sollte Ihr Code näher gelesen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top