2009-05-20 21 views
1

Wenn ich ein benutzerdefiniertes ASP.NET-Steuerelement habe, das als HTML-Steuerelement mit einer ID rendert, versuche ich ein Attribut zum Eingabesteuerelement mit jQuery hinzufügen.jQuery und ASP.NET Steuerelement Problem

Allerdings bin ich in einige Probleme laufen:

Erstens ist meine jQuery, um es auszuwählen nicht in der Lage.

Ich habe bisher:

$(document).ready(function() { 
    $(client id of the input control).attr('onclick', function() { alert('hey!'); }); 
}); 

Es scheint, als ob die jQuery die Eingangskontrolle zu finden versucht, kann aber nicht.

Irgendwelche Ideen?

UPDATE:

Normalerweise werden die vorgestellten Lösungen funktionieren würde, aber da dies eine Sharepoint-Publishing ASPX-Seite ist, werden die Blöcke-Code nicht erlaubt ... andere Arbeit arounds Versuch.

+0

Vielleicht möchten Sie .click oder .bind ('click', ...) für einen Click-Event-Handler im Gegensatz zum .attr-Befehl verwenden –

Antwort

0

Ist Ihr ASP.NET-Steuerelement in einer Masterseite oder einem Benutzersteuerelement? ASP.NET wird Ihrer ID eine Reihe von IDs voranstellen, um sicherzustellen, dass sie eindeutig sind.

Wie lautet die ID des Steuerelements wie in HTML?

+0

Ich render das Steuerelement zuerst und die HTML-Quelle für die ID und bekomme es dort. –

2

Was verwenden Sie als ID des Eingabesteuerelements?

Sie müssen die ClientID des Steuerelements verwenden, nicht die ID.

+0

Ja, aber da dies Clientseite ist, habe ich keinen Zugriff auf die ClientID. Deshalb habe ich erst jetzt das Steuerelement gerendert und dann die ClientID fest programmiert. –

+0

Ja, du musst das umgehen. Sie können den ClientScriptManager verwenden, um ein Stück JavaScript hinzuzufügen, das beim Start ausgeführt wird (mit der Methode RegisterStartupScript). – mbillard

0

Wenn Sie die ID des gerenderten HTML-Steuerelement auf die ID an die Steuer ASP.NET gegeben Einstellung, müssen Sie sich bewusst sein, wie die Kontrolle ID Namespaces ASP.NET behandelt. Im Wesentlichen muss jedes Steuerelement, das in einem Steuerelement verschachtelt ist, immer eine eindeutige Kennung garantieren. ASP.NET behält dies bei, indem es die einem Steuerelement zugewiesene ID übernimmt und ihr die ID jedes Steuerelements vorgibt, das das Steuerelement enthält. Daher enthält ein Steuerelement auf einer Seite eine Zeichenfolge mit IDs, die zum Formular auf der Seite selbst führt.

Sie möchten diese Clientseite nicht neu erstellen. Stattdessen definiert Control die ClientID, die die ID des Steuerelements zurückgibt, die auf dem Client gerendert wurde. Betten Sie dies in Ihre jQuery oder in eine JavaScript-Variable ein, die Ihre jQuery sehen kann, wenn Sie die jQuery in eine separate Skriptdatei schreiben, und Ihnen sollte nichts passieren.

5

Verbinden Sie einfach das Click-Ereignis in jQuery.

$(document).ready(function() { 
    $(id of the input control)click(function() { 
     alert('hey!'); 
    }); 
}); 

Stellen Sie außerdem sicher, dass Sie die ID nicht nur setzen Sie in der jQuery an die Steuerung eingegeben. ASP.Net rendert das Steuerelement mit einer deutlich anderen ID als das Steuerelement. Auf einer der Seiten, die ich laufen, habe ich den folgenden Button:

<asp:Button ID="btnSignup" runat="server" Text="Sign Up" /> 

Die ID im gerenderten HTML ist nicht btnSignup, es macht tatsächlich als ctl00_cpLeft_btnSignup.So wählen Sie, dass die Kontrolle mit jQuery, können Sie dies tun:

$("input[id$='btnSignup'").click(function() { ... }); 

Edit:

$("input[id$='btnSignup'}").click(function() { ... }); 

Sie auch wählen können:

$("#<%= btnSignup.ClientID %>").click(function() { ... }); 

Edit:

I untersucht mit der <% = ...%> Methode und Sie hätten zu haben Ihr Javascript IN die ASPX/ASCX-Datei selbst, damit es funktioniert. Aus diesem Grund würde ich bei der Regex-Methode bleiben.

+1

Niemals daran gedacht, den Attributabgleichselektor zu verwenden. +1 für das anstelle von <% = Button1.ClientID%> –

+0

Ich möchte wirklich einen Vergleich gegen die beiden Methoden ausführen, um zu sehen, welche schneller ist. – Gromer

+0

Gromer, kann immer noch nicht mit der ersten Methode wählen :( $ ("input [id $ = 'btnSignup'"). Click (function() {...}); –

0

nur Sie mitteilen zu können, der document.ready Teil nicht benötigt, asp.net Steuerung über die ID anders dann zu etwas geändert wird, was erwartet wird, ein CT100 .... am Anfang geworfen wird davon wird dieser Weg nach dem tatsächlichen ID-Namen suchen, obwohl asp.net den entstellten Code am Anfang wirft, weil er nach allen Elementen (*) sucht, die eine ID haben, die mit dem angegebenen Text endet.

$(function() { 
    $("*[id$='idofcontrol']".click(function() { alert('hey!'); }); 
}); 

oder zu der Ansicht Quelle gehen und die ID Namen kopieren und in Ihrem Code einfügen oder einfach nur das CSS-Klasse-Selektor als so:

$(function() { 
     $('.myclassname').click(function() { alert('hey!'); }); 
}); 
2

Sie müssen ihre ClientID verwenden. Wenn Ihre ASP.NET Markup wie folgt aussieht:

<uc:MyControl runat="server" ID="myControl1" /> 

Ihr sollte jQuery-Selektor wie folgt aussehen:

$(document).ready(function() { 
    $("<%=myControl1.ClientID%>").attr('onclick', function() { alert('hey!'); }); 
}); 
0

Da Sie Sharepoint erwähnt könnten Sie in dieser Serie auf EndUserSharepoint interessiert sein, die jQuery with Sharepoint auf die Integration fokussiert . Der Autor erläutert, wie jQuery die Webparts manipuliert.