2012-03-14 78 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 
相關問題