2011-12-20 86 views
14

我有一些關於jquery選擇的問題。在我的情況下,如果option.value等於某事,該如何匹配,請爲它標記selectedOnline code herejQuery的選擇如果option.value等於東西,選擇一個標記

再次重複代碼。它導致Uncaught TypeError: Object #<HTMLOptionElement> has no method 'val',如何工作,我的希望?謝謝。

<script type="text/javascript"> 
$(document).ready(function(){ 
    var num = 3; 
    $("div#selection select.select option").each(function(){ 
     if((this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 
</script> 
<div id="selection"> 
    <label>Label1:</label> 
    <select class="select"> 
     <option value="1">V1</option> 
     <option value="2">V2</option> 
     <option value="3">V3</option> 
    </select> 
    <label>Label2:</label> 
    <select class="select"> 
     <option value="4">U1</option> 
     <option value="5">U2</option> 
     <option value="6">U3</option> 
    </select> 
</div> 
+0

也許這篇文章可以幫助你:http://stackoverflow.com/q/196684/508702 – 2011-12-20 08:26:12

回答

16

你在你的if語句做了一個錯字

相反的(this).val()你應該使用$(this).val()this引用一個HTMLObject,$(this)引用一個jQuery對象。由於.val()方法是jQuery框架的一部分,因此您不能在HTMLObjects上使用它。但我相信你知道這一點,因爲它看起來很像一個小小的錯字。

這應該工作:

$(document).ready(function(){ 
    var num = 3; 
    $("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ // EDITED THIS LINE 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 

編輯

,當你發現你的元素,因此沒有按」你可以通過添加一個return false;break;香草循環)優化循環在我們已經「完成」的時候保持循環元素。

但是,您應該看看Nicola Peluchetti的回答爲更有效和更乾淨的代碼。

0

您第一次參考this它不是一個jQuery對象,它是一個DOM對象,並且DOM對象沒有val()方法。您應該使用this.value OCH $(this).val()試試這個:

$("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
0

您的代碼效果很好。只需用$(this)更新'this'即可。如果沒有其他選擇下拉菜單,您可以省略'div#selection select'。如下所示。

$(document).ready(function(){ 
    var num = 3; 
    $("select option").each(function(){  
     if($(this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 
15

你有一個錯字,並選擇作爲選擇的,你應該使用prop()而不是ATTR(套)。在任何情況下,你可以做

var num = 3; 
$("div#selection select.select option[value="+num+"]").prop("selected", true); 

這裏小提琴http://jsfiddle.net/YRBrp/

編輯 - 當然錯字就是蒂姆·S.指出的那樣,你不應該(this).val()

+0

我完全同意你,但這並不能解釋他的錯誤 – 2011-12-20 08:38:16

+0

另外,我編輯了我的帖子,並提到這個答案,因爲它很性感 – 2011-12-20 08:43:06

+0

你救了我!我自己無法想到這一點。 +1 – 2012-01-31 08:35:47

0

試試下面

使用 $(this).val()
$("div#selection select.select").val(num); 

如果您的選擇框是多個選擇,您可以嘗試

$("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ 
     $(this).attr("selected", true);  
     } 
    }); 
1

你的問題就在這裏開始

$( 「#DIV選擇select.select 選項」)。每個(函數(){ 如果((本).VAL() == NUM​​){

改變它

$("div#selection select.select").each(function(){ 
if($(this).val()==num){ 

和所有解決的問題,你可能想改變如果你正在考慮在每次選擇被改變時觸發腳本,那麼每一個改變。

相關問題