¿Cómo consigo que jQuery seleccione elementos con extensión . (punto) en su DNI?
Dadas las siguientes clases y método de acción del controlador:
public School
{
public Int32 ID { get; set; }
publig String Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street1 { get; set; }
public string City { get; set; }
public String ZipCode { get; set; }
public String State { get; set; }
public String Country { get; set; }
}
[Authorize(Roles = "SchoolEditor")]
[AcceptVerbs(HttpVerbs.Post)]
public SchoolResponse Edit(Int32 id, FormCollection form)
{
School school = GetSchoolFromRepository(id);
UpdateModel(school, form);
return new SchoolResponse() { School = school };
}
Y el siguiente formulario:
<form method="post">
School: <%= Html.TextBox("Name") %><br />
Street: <%= Html.TextBox("Address.Street") %><br />
City: <%= Html.TextBox("Address.City") %><br />
Zip Code: <%= Html.TextBox("Address.ZipCode") %><br />
Sate: <select id="Address.State"></select><br />
Country: <select id="Address.Country"></select><br />
</form>
Puedo actualizar tanto la instancia de la escuela como el miembro de la dirección de la escuela. ¡Esto es bastante lindo! ¡Gracias equipo de ASP.NET MVC!
Sin embargo, ¿cómo uso jQuery para seleccionar la lista desplegable y poder completarla previamente? Me doy cuenta de que podría hacer este lado del servidor, pero habrá otros elementos dinámicos en la página que afectarán la lista.
Lo siguiente es lo que tengo hasta ahora y no funciona porque los selectores no parecen coincidir con los ID:
$(function() {
$.getJSON("/Location/GetCountryList", null, function(data) {
$("#Address.Country").fillSelect(data);
});
$("#Address.Country").change(function() {
$.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
$("#Address.State").fillSelect(data);
});
});
});
De Grupos de Google :
Utilice dos barras invertidas antes de cada carácter especial.
Una barra invertida en un selector jQuery escapa al siguiente carácter. Pero necesitas dos de ellos porque la barra invertida también es el carácter de escape para las cadenas de JavaScript. La primera barra invertida escapa de la segunda, lo que le proporciona una barra invertida real en su cadena, que luego escapa al siguiente carácter para jQuery.
Entonces, supongo que estás mirando
$(function() {
$.getJSON("/Location/GetCountryList", null, function(data) {
$("#Address\\.Country").fillSelect(data);
});
$("#Address\\.Country").change(function() {
$.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
$("#Address\\.State").fillSelect(data);
});
});
});
Consulte también ¿Cómo selecciono un elemento mediante una ID que tenga caracteres utilizados en notación CSS? en las preguntas frecuentes de jQuery.
No puede utilizar un selector de identificación de jQuery si la identificación contiene espacios. Utilice un selector de atributos:
$('[id=foo bar]').show();
Si es posible, especifique también el tipo de elemento:
$('div[id=foo bar]').show();
Escápelo para Jquery:
function escapeSelector(s){
return s.replace( /(:|\.|\[|\])/g, "\\$1" );
}
ejemplo de uso:
e.find('option[value='+escapeSelector(val)+']')
más información aquí .