2013-07-09 48 views
1

所以我有一个简单的页面(html)在哪里使用jQuery我加载到一个选择使用PHP文件。 的代码如下: 的HTML:动态生成选项的问题选择

<div data-role="page" id="pg_invoicedtl"> 
    <header data-role="header" data-theme="b"> 
    <a href="javascript:history.go(0)" data-icon="refresh" class="ui-btn-right" data-theme="e">Refresh</a> 
    <h1>MyApp</h1> 
    </header> 

    <div align="center" data-role="content"> 
     <ul data-role="listview" data-theme="c" data-divider-theme="e" data-count-theme="b" data-inset="true"> 
      <li data-role="list-divider"> 
       <h3 class="ui-li-heading">Select product</h3> 
      </li>    

      <li> 
      <div data-role="fieldcontain"> 
       <label for="prodselect" class="select">Choose the product:</label> 
       <select name="prodselect" id="prodselect"> 
       </select> 
      </div>    
      </li> 
     </ul> 
    </div> 
</div> 

脚本(位于当然在HEAD部分),我用它来填充的选择是:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $.ajaxSetup ({ 
       cache: false 
      }); 

      var ajaxLoader = '<img src="images/ajax-loader.gif" alt="loading.." />'; 
      var loadUrl = "loadproducts.php"; 


      $('#prodselect').toggle('fast', function() { 
       $(this).html(ajaxLoader); 
       $(this).toggle('fast', function() { 
        $.get(loadUrl, function(data){ 
         $('#prodselect').html(data); 
        },'html');     
       }); 
      }); 
      $('#prodselect').selectmenu('refresh'); 
     });   
</script>  

而且现在的PHP文件(loadproducts.php)脚本正在呼叫:

<?php 
session_start(); 
include "/tmp/conexiune.php"; 

$pql = mysql_query("select * from products order by name"); 
$isfirst = 0; 
while ($prow = mysql_fetch_row($pql)){ 
    if ($isfirst == 0){ 
     echo '<option id="'.$prow['idproducts'].'"value="'.$prow['name'].'" selected="selected">'.$prow['name'].' - '.$prow['pu'].' EUR</option>'; 
    } 
    else 
    { 
     echo '<option id="'.$prow['idproducts'].'"value="'.$prow['name'].'">'.$prow['name'].' - '.$prow['pu'].' EUR</option>'; 
    } 
    $isfirst++; 
}  
?> 

首先,我必须告诉你,上面的代码工作。随着一个问题,但...我的问题...:

  • 正如你可以从代码中观察到的,我不想被“选中”的选择的第一选择,但无论我做什么,它不会发生。刷新页面后,选择框为空,如果我想使用鼠标选择列表中的第一个选项,它不会执行任何操作,就好像第一个项目已被选中一样,所以它不会执行此操作。

  • 如果我想选择列表中的第二个或其他选项,所有工作正常。

  • 因此,选择的第一个元素似乎被选中,但不会在选择框中显示它的值。

  • 我甚至加了$('#prodselect')。selectmenu('refresh');到脚本没有结果...

  • 此外,如果我使用非dinamically生成的选项,一切工作完美。所以对于静态选项,选择从一开始就显示第一个选项。

    我不明白什么可能是错的。我在HTML之外测试了php文件(没有从脚本调用它),结果看起来就像一个完美的选择内容,并且当放入选择标记时它显示出完美的结果。但是当我从脚本中调用它时,事情会变得混乱。

    我会把一个的jsfiddle这里,但我不认为它与PHP文件...

+0

你试过$( '#prodselect).selectmenu(' 刷新',是); –

+0

我尝试过。不起作用。如果您有权访问PHP + MySql环境,请亲自尝试。这只是一个简单的产品表,一个简短的PHP文件和上面的简单HTML。你应该能够轻松地重现我的问题。 –

回答

0

试试这个:

$('#prodselect').selectmenu('refresh', true); 

加载动态内容后,您需要强制重建选择的文件中提到: http://api.jquerymobile.com/selectmenu/#method-refresh

+0

我也尝试过。它看起来不会刷新......我甚至在调用刷新方法之前和之后放置警报以查看它是否触发。它确实如此。但刷新没有发生 –

+0

@CalinM尝试在$('#prodselect')。html(data);后调用。行 –

+0

非常感谢。这是解决方案。我在'$('#prodselect')。html(data);'行后面放置了刷新,现在它工作。 –

0

尝试使用===(注3),而不是==

如果不工作,那么改变:

$isfirst = 0; 

$isfirst = 1; 

由于0可以评估的情况下为假。

希望这会有所帮助!

+0

我也改变了。但它不是来自php,因为正如我之前所说的,我直接在浏览器中启动了php文件,并查看了页面源代码。并且在源文件中,选项可以很好地显示出来......第一个选项就是选中的选项。 –

+0

这是我直接调用php时的输出:''因此,您可能会看到,第一个选项是**选择** –