2012-03-14 74 views
7

使用JQuery,我试图设置一个选项作为选择基于查询字符串的'选择'元素。Javascript和JQuery,如何验证select中是否存在选项元素?

这个问题类似于this,但是我仍然需要知道如何在执行选择之前检查元素是否存在,否则页面将不断刷新自身(请参见下面的退出条件)。

使用函数getParameterByName完成查询字符串的获取,并且它工作正常。

当前实现如下:

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(); 
} 

更新:它工作的解决方案是:

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

设定值'.val()'会选择那个项目,所以为什么你也使用'.attr('selected','selected')'? – nnnnnn 2012-03-14 08:39:44

+1

我会更新示例如果可行,谢谢 – haschdl 2012-03-19 12:24:56

回答

17

尝试检查selectObject.find('option[value="'+valueToSelect +'"]').length > 0

+0

有很多方法要做到这一点,但我认为这是最简单的方法。谢谢! – berdem 2012-09-01 17:03:12

+3

将'valueToSelect'的值换成引号似乎更安全:'selectObject.find('option [value =''+ valueToSelect +'“]')。length()' – 2014-02-17 19:39:04

+0

好,但如果我有select像这样:{“狗”,“猫”,“鱼”},我搜索“猫”(注意小写),不匹配。 – candlejack 2016-11-05 14:44:55

2

检查选择的长度:

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

或者使用隐式布尔转换为javascript:

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

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

请参阅我不想检查选择对象是否存在,而是我需要检查是否存在valueToSelect。我正在检查来自@ Dennis的答案 – haschdl 2012-03-19 12:26:00

+0

相反,它应该是相同的:D所以我只是使用代码selectObject.find('option [value ='+ valueToSelect +']')。length() – haschdl 2012-03-19 12:37:47

0

你可以使用.length>0来检查元素确实存在。但是,如果你一遍又一遍运行此代码得到它的那种恼人的,所以我写了一个小插件,它保证了这种功能:

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

用法:

$('#myDiv').doesExist() // returns a boolean 
相关问题