2014-10-27 141 views
1

我有一个动态填充的选择框,旨在用于显示有关单个选项的信息。我得到的问题是,当我点击任何选项时,似乎并没有在浏览器中触发一个:selected事件。在jQuery/AJAX中的动态填充select元素上选择一个选项

我将来不知道这些信息是什么,但不应该从.val()(理论上)得到已动态填充的选项的值?到目前为止,它似乎没有工作。

原始的HTML

<select id="activeList" size="5"> 
</select> 

的选项有以下的javascript填充(和它的伟大工程,JSON数据似乎是工作变得轻而易举,我很高兴开始使用它):

function popuList(){ 
    // Populates the SELECT element with options from the JSON file. 
    var url = "/calls/sessions.php"; 
    var list = ''; 
    $.getJSON(url,'',function(jdata,oSucc,jqXHR){ 
     $.each(jdata,function(i,session){ 
      $.each(session,function(n,data){ 
       list += "\n" + '<option value="'+data.name+'">'+data.name+'</option>'; 
      }); 
     }); 
     $("#activeList").html(list); 
    }); 
} 

的问题是,我似乎不能抢所选选项的值,这样我可以动态更新页面上的其他元素。我试过.val():selected,甚至把列表项放入一个全局数组变量中......似乎没有任何工作,我不确定为什么。

当我检查浏览器中的元素(FF和Chrome)时,这些选项在那里,但是我点击它们时没有选择属性。代码似乎不关心他们是否被选中。既然如此,我如何检测与列表的交互?

在检查的HTML看起来像:

<select id="activeList" size="5"> 
    <option value="00000000003">00000000003</option> 
    <option value="00000000002">00000000002</option> 
    <option value="00000000001">00000000001</option> 
</select> 

以供将来参考(并作为提醒)我不打算一定知道的值。我甚至想做甚么?

上述功能从$(document).ready(function(){}回调中调用一次页面加载。如果很重要,jQuery 1.11.1是正在使用的版本。浏览器都是最新的。我正在使用Notepad ++进行编辑。不确定其他信息会有帮助。

+0

那里'\ n'的需求是什么? – 2014-10-27 06:50:07

+0

它的唯一用途是对代码进行美化,以便在通读代码时知道我在看什么。它增加了一个换行符。我迷路了。 – 2014-10-27 06:51:12

+1

你在哪里使用过'.val()'或':selected'?你能否分享这些代码? – 2014-10-27 06:52:10

回答

0

更换选择元件动态势必引起问题的HTML。最好使用JavaScript本身来让浏览器正确处理它。 Click here to see how

+0

这实际上是我应该选择的方向,尽管当我实际尝试时,仍然没有能力检测何时选择了一个对象...例如,没有“javascript:”选定的属性,javascript会将其识别为选定对象。 – 2014-10-27 07:50:54

+0

所选属性仅用于确定默认选举选项。改为使用select元素的值属性。 – 2014-10-27 18:36:08

+0

我还没有足够的代表来upvote这个,但它实际上是什么让我得到我需要的答案。 – 2014-10-28 04:23:18

0

使用onclick事件,然后通过使用获得的选定值以下

<select id="activeList" size="5" onclick='onclicklist()'> 
</select> 

<script> 
    function onclicklist() { 
     var selectedvalue = $("#activelist option:selected").val(); 
    } 
</script> 
+0

问题是,在动态生成的代码中,它并不是真的:在任何时候都被选中......这就是整个问题。因此,尽管您的解决方案可能适用于预先填充的列表,但它现在在代码中实际上不起作用。是的,我只是试了一下。 – 2014-10-27 08:17:36

+0

那么它给你什么,它是空的,第一项还是什么? – Shadi 2014-10-27 10:07:04

+0

它给了我一个“未定义”,就好像我没有什么开始。 – 2014-10-28 04:29:29

0

首先,一些浏览器对使用.html(...)填充选择节点的响应不佳。追加选项节点要安全得多。

其次,要响应用户对填充选择元素的选择,您需要附加'onchange'处理程序。附件可以在添加选项之前或之后进行。

function popuList() { 
    var $select = $("#activeList").on('change', function() { 
     var val = this.value; 
     //do real kewl stuff with the value here 
    }); 
    // Populates the SELECT element with options from the JSON file. 
    var url = "/calls/sessions.php"; 
    $.getJSON(url, '', function(jdata, oSucc, jqXHR){ 
     $.each(jdata,function(i, session) { 
      $.each(session, function(n, data) { 
       $('<option value="' + data.name + '">' + data.name + '</option>').appendTo($select); 
      }); 
     }); 
    }); 
} 
+0

我还没有尝试过,但是选定的元素是否可以在其他函数的函数之外访问,或者是否需要将信息放回到数据库处理程序(例如getJSON()或get())中其他的东西再次访问? – 2014-10-27 07:45:55

+0

我不确定你的意思,但会尝试回答。在函数内用'var'声明的任何东西都是该函数的本地对象(以及任何内部函数)。在'$ select'的情况下,var $ select = $(“#activeList”)'代码中的任何其他地方都会引用相同的元素,'$ select.val()'将返回当前的值选定的选项。如果在其他代码中需要知道所有会话值,理论上可以从'#activeList'中的选项中读取它们,但是您需要知道自己在做什么,因为其他代码可能在选择之前运行框被填充。 – 2014-10-27 10:57:59

+0

这是一个比我模糊的问题更具体的答案,哈哈。 – 2014-10-27 12:25:25

相关问题