2011-01-06 7 views
3

Ich benutze Richfaces und einen der Reichen: Datatable erzeugt diese HTML:jQuery - füge Onclick bis TR

<form id="scheduleForm"> 
    <table id="scheduleForm:rowList"> 
    <tr> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
    </tr> 
    </table> 
</form> 

ich auf einem Klick auf einem TR für diese Tabelle handeln will. Wie kann ich das machen? Das Folgende funktioniert auch für andere Tabellen auf der Seite und ich bekomme die alert() auch für die anderen Zeilen, und das will ich nicht.

 jQuery('#scheduleForm:rowList tr').click(function(event) { 
      alert(1); 
     }); 

Über das Zeichen ':'. Es wird von Richfaces erzeugt.

Der ursprüngliche Code ist:

<h:form id="scheduleForm"> 
<rich:dataTable id="rowList"> 
</rich:dataTable> 
</h:form> 
+0

Ich denke, das ":" könnte hier etwas spielen. Wenn ich nicht falsch liege ":" ist ein Meta-Char und hat eine Bedeutung in den Selektoren. – Biswanath

Antwort

2

Ich weiß, dass : von JSF/RichFaces generiert wird. Ich hatte auch Probleme mit diesem : vorher. Es ist wahrscheinlich nicht das, was die jQuery Leute in einer ID erwartet. Sie verwenden es für Selektoren. Was Sie wollen, können dies tun, ist:

jQuery('table[id = "scheduleForm:rowList"] tr').click(...) 

Check out http://jee-bpel-soa.blogspot.com/2009/04/tips-and-tricks-on-jquery-and-richfaces.html

+0

Danke! Funktioniert wie ich will. – Guus

0

Sie die unten tun können, geben die tr eine ID.

<form id="scheduleForm"> 
    <table id="scheduleForm:rowList"> 
    <tr id="tr1"> 
     <td></td> 
    </tr> 
    </table> 
</form> 

jQuery('#tr1').click(function(event) { 
    alert(1); 
}); 
+0

Das wäre offensichtlich, aber ich glaube nicht, dass es sehr einfach ist, IDs auf mit JSF und RichFaces zu erzwingen ... –

+0

Danke, ich habe vergessen zu erwähnen, dass es mehr Zeilen geben kann. Ich möchte es für alle Zeilen für diesen Tisch. – Guus

1

versuchen Sie Folgendes, es würde Ihnen helfen.

jQuery(document.getElementById('scheduleForm:rowList').getElementsByTagName('tr')).click(function(event) { 
      alert(1); 
     }); 
+0

Danke. Das funktioniert auch. – Guus

0

Versuch zu verwenden:

jQuery('#scheduleForm:rowList>tr').click(function(event) { 
      alert(1); 
     }); 

und es wird besser nicht Charter verwenden „:“ in Wert von id attribute.I nicht genau < wußte, aber ich denke, dass es sein kann, der Klang vieler Probleme.

+0

Ok, danke. ":" wird von Richfaces generiert. – Guus

0

Sie haben einen Doppelpunkt : in einem ID-Attribut. Colon hat eine besondere Bedeutung in jQuery Selektoren, so müssen Sie es so entkommen:

jQuery('#scheduleForm\\:rowList tr').click(function(event) { 
     alert(1); 
}); 
+0

Danke, das funktioniert auch. – Guus

0

Die: erzeugt durch JSF. Sie können prependId = "false" auch auf dem Formular festlegen. Verwenden Sie dann einfach:

jQuery('#rowList tr').click(function(event) { alert('hello'); }); 

und nur diese Tabelle wird ausgewählt.

+0

Ah danke für die prependId = false, lerne etwas neues! – Guus

0
jQuery("#rowList").on("click", "tr", function(event) { 
    alert($(this).id); 
}); 
+0

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes hinsichtlich dessen, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. – adiga