2012-03-14 16 views
7

Utilizando JQuery, intento establecer una opción como seleccionada en un elemento 'select' basado en la cadena de consulta.Javascript y JQuery, cómo verificar si el elemento de opción existe en select?

Esta pregunta es similar a this, sin embargo, todavía necesito saber cómo verificar si el elemento existe antes de realizar la selección; de lo contrario, la página se actualizará continuamente (ver la condición de salida a continuación).

La obtención de la cadena de consulta se realiza mediante la función getParameterByName, y está funcionando bien.

La implementación actual a continuación:

function setSelectedItem(selectName, itemToSelect) { 
    ///<summary>Selects an HTML option element inside a HTML select element based on the value from the query string.</summary> 
    ///<param name="selectName" type="string">The partial name of the HTML select in which 'itemToSelect' must be selected</param> 
    ///<param name="itemToSelect" type="string">The name of the query string parameter which value is the of the 'option' element to select.</param> 

    //If an items has already been selected, return 
    if ($('select[name*=' + selectName + ']')[0].selectedIndex != 0) return; 


    //Fetches the value from the query string; if empty, returns 
    var valueToSelect = getParameterByName(itemToSelect); 
    if (valueToSelect == "") return; 

    //Fecthes the HTML select object 
    var selectObject = $('select[name*=' + selectName + ']'); 

    //HERE how to check if 'valueToSelect' does not exist and return? 

    selectObject.val(valueToSelect).attr('selected', 'selected').change(); 
} 

Actualización: La solución que funcionó fue:

//Checks if the option exists, and returns otherwise 
    if (!selectObject.find('option[value=' + valueToSelect + ']').length) 
     return; 
+0

Establecer el valor con '.val()' seleccionará ese elemento, entonces ¿por qué también usas '.attr ('selected', 'selected')'? – nnnnnn

+1

Voy a actualizar el ejemplo si eso funciona, gracias – haschdl

Respuesta

17

intenta comprobar selectObject.find('option[value="'+valueToSelect +'"]').length > 0

+0

Hay muchas formas para hacer esto, pero creo que esta es la forma más simple. ¡Gracias! – berdem

+3

Parece más seguro ajustar el valor de 'valueToSelect' entre comillas:' selectObject.find ('option [value = "' + valueToSelect + '"]'). Length() ' –

+0

Bueno, pero si tengo una selección así: {"Perro", "Gato", "Pez"} y yo busqué "gato" (nótese la minúscula), no coincidía. – candlejack

2

Compruebe la longitud del selector:

var selectObject = $('select[name*=' + selectName + ']'); 
if (selectObject.length == 0) 
    return; 
selectObject.val(valueToSelect).attr('selected', 'selected').change(); 

O usar el booleano implícito conversión en javascript:

var selectObject = $('select[name*=' + selectName + ']'); 
if (!selectObject.length) 
    return; 

selectObject.val(valueToSelect).attr('selected', 'selected').change(); 
+0

Ver, no quiero comprobar si el objeto seleccionado existe, en su lugar, tengo que comprobar si existe valueToSelect. Estoy revisando la respuesta de @Dennis – haschdl

+0

Por el contrario, debería ser la misma: D Así que solo uso el código selectObject.find ('option [value =' + valueToSelect + ']'). Length() – haschdl

0

usted podría utilizar .length>0 para comprobar si existe el elemento. Pero si se está ejecutando el código una y otra vez que de conseguir un poco molesto por lo que he escrito un pequeño plugin que asegura que tipo de funcionalidad:

/* doesExist PLUGIN (c) MS */ 
/* (c) Michael Stadler(MS), */ 
(function($){ 
$.fn.doesExist = function() 
{ 
return jQuery(this).length > 0; 
}; 
})(jQuery); 

Uso:

$('#myDiv').doesExist() // returns a boolean 
Cuestiones relacionadas