2013-05-03 5 views
5

Aus irgendeinem Grund kann ich nicht versteckte Eingaben von ID mit jQuery abrufen.Targeting versteckte Eingaben durch ID mit jQuery

kann ich

> $('input') 
[<input type=​"checkbox" name=​"property-type" id checked>​, <input type=​"checkbox" name=​"property-type" id checked>​, <input type=​"checkbox" name=​"property-type" id>​, <input type=​"checkbox" name=​"property-type" id>​, <input type=​"hidden" name=​"no-of-rooms" id=​"1-rooms">​, <input type=​"hidden" name=​"no-of-rooms" id=​"2-rooms" checked>​, <input type=​"hidden" name=​"no-of-rooms" id=​"3-rooms" checked>​, <input type=​"hidden" name=​"no-of-rooms" id=​"4-rooms">​, <input type=​"hidden" name=​"no-of-rooms" id=​"5-rooms">​, <input type=​"hidden" name=​"no-of-rooms" id=​"over-5-rooms">​, <input type=​"checkbox" name=​"property-type" id>​, <input type=​"checkbox" name=​"property-type" id>​, <input type=​"checkbox" name=​"property-type" id>​] 

, der mich schön alle Eingaben auf der Seite bekommt, verstecken die vom Typ = einschließlich.

kann ich auch

> $('input[type="hidden"]') 
[<input type=​"hidden" name=​"no-of-rooms" id=​"1-rooms">​, <input type=​"hidden" name=​"no-of-rooms" id=​"2-rooms" checked>​, <input type=​"hidden" name=​"no-of-rooms" id=​"3-rooms" checked>​, <input type=​"hidden" name=​"no-of-rooms" id=​"4-rooms">​, <input type=​"hidden" name=​"no-of-rooms" id=​"5-rooms">​, <input type=​"hidden" name=​"no-of-rooms" id=​"over-5-rooms">​] 

, die mir alle meine versteckte Felder bekommt. Beachten Sie, dass sie alle eine ID haben.

Aus irgendeinem Grund versuchen, diese Eingänge durch ihre ID, entweder mit oder ohne die [type="hidden"] enthalten, zu bekommen, wird mir eine leere Liste.

> $('input[type="hidden"]#2-rooms') 
[] 
> $('input#2-rooms') 
[] 

Ich habe es geschafft, eine Abhilfe zu finden, indem Sie einfach nicht, sie durch ihre ID-s-Targeting, aber es wäre nützlich zu wissen, warum dies nicht möglich erscheint.

EDIT

Mit nur $('#2-rooms') für mich funktioniert und ist offenbar der beste Ansatz. Allerdings bin ich immer noch unsicher, warum $('input#2-rooms') nicht funktioniert, wie ich hatte tatsächlich die html5 doctype (<!DOCTYPE html>), und ich verstehe IDs beginnend mit Zahlen sollte in diesem Fall in Ordnung sein.

+0

Haben Sie zufällig '$ ('# 2-rooms')' –

+1

versucht Wahrscheinlich verwenden Sie nicht HTML5, und vor HTML5 konnten IDs nicht mit einem numerischen Zeichen beginnen. Versuchen Sie es mit dem html5 Doctype, um zu bestätigen: '' (oder Sie könnten nur die IDs ändern, um kein numerisches Zeichen als erstes Zeichen zu verwenden) –

+0

Dumm mich, weil ich nicht '$ ('# 2-rooms') versuche ', die funktioniert (obwohl ich immer noch vorziehen würde, dass es eine Eingabe für die Klarheit ist ..). Ich habe jetzt auch '$ ('input # over-5-rooms') versucht, das nicht mit einer Nummer beginnt und auch funktioniert. Ich habe den html5 Doctype eingeschlossen, also sollte das nicht das Problem sein, auch bestätigt durch die Tatsache, dass '$ ('# 2-rooms') scheint gut zu funktionieren. – Elise

Antwort

1

Sie können Platzhalter verwenden, indem Sie den Attributselektor anstelle des ID-Selektors verwenden.

$('[id$=rooms]') 

OR, verwenden * für enthält

$('[id*=rooms]') 

Oder wenn Sie einzelnes Element mit id, live demo

$('#2-rooms') 

bearbeiten Wenn Sie mit der ID einzelnes Element haben dann Sie können einfach ID-Selektor verwenden $('#2-rooms') Wenn mehr dann haben ein Elemente dieselbe ID, dann ist es kein gültiges HTML, du solltest einzigartige IDs haben. Wenn Sie IDs mit einem Muster wie 2-Zimmer, 3-Zimmer haben, dann verwenden Sie den Attribut-Selektor mit Platzhaltern.

+1

OP hat eine Arbeit gefunden, die Frage ist, warum nicht der ID-Selektor funktioniert. –

+0

Ich denke, OP in OP-Lösung müssen wir Eingabe in Selektor geben wie $ ('input # 2-rooms') – Adil

+1

Dies funktioniert ebenso wie Targeting einzelne versteckte Felder mit '$ ('input [id =" 2- Zimmer "] ')'. Vielen Dank! – Elise