【问题标题】:Jquery working only for first iterationJquery 仅适用于第一次迭代
【发布时间】:2013-05-26 23:39:16
【问题描述】:

所以我试图通过 jquery 输出一个动态填充的下拉列表。问题是它只适用于一次迭代。脚本 -

<script> $(function() 
        {
            $("#projects").change(function() {   
            $("#tasks").load("getdata.php?choice=" + $("#projects").val());
            });       
        });           //getdata.php queries data and echoes <option>
                      //#projects -> <select> id and #tasks->options id
    </script>

我知道这与在那里介绍每个人有关,但我似乎无法让它发挥作用。

这是循环的 div -

foreach($days as $key=>$day)         //inside <select  id="projects">
{
    echo '<td align="center" width="65">
            <div>'.$day.'<br><input name="hours" type="text" size="2" placeholder="hours">
                <select id="tasks">
                    <option>Select a Project First</option>
                </select>
            </div>
          </td>';
}

【问题讨论】:

  • 您能否编辑问题并添加所有相关的 HTML。我想看看#tasks#projects 元素。

标签: php javascript jquery web-applications


【解决方案1】:

从php文件返回会改变#task的内容

$(document).ready(function(){
    $('.#projects').change(function(){
        var getdata = 'getdata.php?choice='+$("#projects").val();
        alert(getdata);
        $('#tasks').load(getdata);
    });
})

【讨论】:

  • 试过了,还是一次迭代。我不知道我哪里错了:|
  • 嗨,在选择更改后,您需要更改#task 的值,是这样吗?更改后您是否收到任何错误?或者你也想重新加载#project
  • 是的,在加载对项目任务的更改之后。我绝对没有错误它工作正常,但仅适用于 onr 迭代。如果您在上面看到,我有一个 foreach 循环显示输出。输出结果为 finr,但 jquery 仅在第一次迭代时有效。
【解决方案2】:

您需要对将动态出现的元素使用 .on()。

 $(document).on('change','#projects',function(){
   //code here
 });

【讨论】:

  • 这应该如何帮助任何人了解问题和解决方案。还记得几天前的our conversation 吗?
  • @andyb 对不起。其实是朋友打电话给我的。所以我就这么着急发帖
  • 尝试了一次迭代:\
  • 这不是和我在做什么的$("#projects").change(function()本质上一样吗?
【解决方案3】:

你需要在动态追加val后刷新下拉列表


//refresh value         
$('select').selectmenu('refresh');

//refresh and force rebuild
$('select').selectmenu('refresh', true);

【讨论】:

    【解决方案4】:

    所以我在朋友的帮助下解决了这个问题。 首先,我的一个非常根本的错误 -

    由于 &lt;select id="tasks"&gt; 字段被循环显示,因此将 id 更改为 class 更可行。

    之后,只需将#tasks 更改为.tasks,jscript 就可以完成这项工作。

    否则each()也可以用来达到这样的结果-

    $(".tasks").each(function() 
    {
          $(this).(load)("getdata.php?choice=" + $("#projects").val());
    });
    

    【讨论】:

      猜你喜欢
      • 2013-07-07
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多