2011-09-09 108 views
2

我正在尝试遵循本教程(http://railscasts.com/episodes/88-dynamic-select-menus)获取使用RoR的动态选择框。无需担心RoR位,这是一个Javascript特定的问题。当我在选择框中调用.options时,为什么会出现“未定义”?

每次运行此函数时,都会出现“选项”未定义的错误。我试着在控制台中手动运行命令,但无论如何,它都会吐出未定义的命令。我有它的确切类型,因为我看到它的教程,但不知何故,它不工作对我来说...

这里是有问题的javascript:

function clientSelected() { 
var client_id = $('#piece_client_id').val(); 
// THIS IS THE PROBLEM LINE 
var options = $('piece_campaign_id').options; 
options.length = 0; 
campaigns.each(function(campaign) { 
    if (campaign[0] == client_id) { 
     options[options.length] = new Option(campaign[1], campaign[2]); 
    } 
}); 
if (options.length == 1) { 
    $('campaign_field').hide(); 
} else { 
    $('campaign_field').show(); 
} 
} 

这里是它的努力工作,在HTML :

<select id="piece_campaign_id" name="piece[campaign_id]"><option value=""></option> 
<option value="1">Feed The Dogs</option> 
<option value="2">Watch Television</option> 
<option value="3">End The Suffering</option> 
<option value="4">Brian Bilbrey</option> 
<option value="5">SummerHill Homes/Yes on A&amp;B</option> 
</select> 

感谢一堆看看!让我知道是否还有其他事情可以添加,以使我的问题更加清晰。

+0

你'。each()'循环也不起作用。我不知道'campaign'是什么,但'campaign'参数将指向一个索引号,所以'campaign [0]'将永远是'undefined'。 – user113716

+0

...它看起来像你所遵循的教程不使用'jQuery'。我猜可能是'prototypejs'。 – user113716

回答

12

尝试:

var options = $('#piece_campaign_id').get(0).options; 

var options = $('#piece_campaign_id')[0].options; 

当你使用的是jQuery对象,它不具有options财产。另外,请确保包含id选择器(#)。

+3

$('#piece_campaign_id')[0] .options'做同样的事情,稍微短一些。 – Blazemonger

+0

@ mblase75我忘记了数组的语法,我将它编辑进去。 –

+0

不错!那是魔术酱。我已经尝试了id选择器没有运气,所以我已经恢复。但get(0)做到了!我将不得不阅读:D谢谢! – counterbeing

0
$('piece_campaign_id') 

必须

$('#piece_campaign_id') 
2

以下代码不准确。

var options = $('piece_campaign_id').options; 

应该

var options = $('#piece_campaign_id')[0].options; 

你会发现两个变化。

  1. 在选择
  2. 通过添加[0]的jQuery对象之后通过添加#的。

在jQuery中你所需要的idvalue(这类似于CSS之前追加#的ID选择一个元素。下面是一些参考http://api.jquery.com/id-selector/

下一个问题是你试图访问属性这并不一个jQuery对象上存在。options是一个HTML DOM属性。正因为如此,你必须从jQuery对象内访问DOM对象。

var options = $('#piece_campaign_id') //Returns jQuery Object 

var options = $('#piece_campaign_id')[0] //Returns HTML DOM Object 
//The line above will return the same as 
var options = document.getElementById('piece_campaign_id') 

注意

在你的代码下面的选择器是最有可能不准确

$('campaign_field').hide(); 
    ... 
    $('campaign_field').show(); 
相关问题