【问题标题】:drop down menu works in all browsers except internet explorer下拉菜单适用于除 Internet Explorer 以外的所有浏览器
【发布时间】:2012-12-15 23:21:59
【问题描述】:

我在下面有这段代码,它假设能够通过使用 ajax 从另一个页面检索模块来在下拉菜单中显示模块列表:

下面给出的代码

    $(document).ready( function(){

        jQuery.ajax({ 
        type: "post", 
        url:  "module.php", 
        success: function(response){ 
        jQuery('#modulesDrop').append(response); 
        } 
        }); 
    });

...

<?php

    $moduleHTML = "";  
    $moduleHTML .= '<select name="modules" id="modulesDrop">'.PHP_EOL; 
    $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
    $moduleHTML .= '</select>'; 

?>

module.php 页面:

<?php

     // connect to the database
     include('connect.php');

     /* check connection */
     if (mysqli_connect_error()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
    }

    $moduleactive = 1;

    $sql = "SELECT ModuleId, ModuleNo, ModuleName FROM Module WHERE ModuleActive = ? ORDER BY ModuleNo"; 


     $sqlstmt=$mysqli->prepare($sql);

     $sqlstmt->bind_param("i", $moduleactive);

     $sqlstmt->execute(); 

     $sqlstmt->bind_result($dbModuleId,$dbModuleNo,$dbModuleName);


    $moduleHTML  = "";  

     while($sqlstmt->fetch()) { 
         $moduleHTML .= sprintf('<option value="%1$s_%2$s_%3$s">%1$s - %2$s</option>'.PHP_EOL, $dbModuleNo, $dbModuleName, $dbModuleId);
    } 


    echo $moduleHTML; 

     $sqlstmt->execute(); 


    ?>

我不明白的是,下拉菜单设法在所有主要浏览器中显示模块列表,但 Internet Explorer 仍显示“请选择”选项。为什么在 Internet Explorer 中下拉菜单无法显示列表?

更新:

我将废弃 ajax 方法,将主要的 php 代码粘贴到原始脚本中

【问题讨论】:

  • 你看浏览器的消息日志了吗?
  • @wallyk 我如何访问它?
  • @user1930247 按 F12 或在 IE 的 Menu->Tools->Developer Tool 下找到它。还有一件事,您还可以提醒响应以检查正在涌入的数据。检查 jQuery 是否正确添加到页面上。让我知道你是否可以通过日志修复它
  • @swapnesh 好的,我按 f12 打开了窗口,我应该选择哪个选项卡来查看消息?我进入了控制台选项卡,但那里没有出现错误
  • @user1930247 更改 echo $moduleHTML; $sqlstmt->执行(); TO $sqlstmt->执行();回声 $moduleHTML;然后告诉我

标签: php jquery ajax cross-browser mysqli


【解决方案1】:

你最好只在你自己的脚本中使用 php 来检索模块,在同一脚本中使用 php/mysqli 来检索模块

【讨论】:

  • 我认为可以回答您自己的问题。虽然我发现这里的一些答案更适合实际问题。即使您决定自己找到了更好的解决方案,也请不要假装自己在自言自语。真是令人毛骨悚然……
【解决方案2】:

试试这个方法

    $(document).ready( function(){

        jQuery.ajax({ 
        type: "post", 
        url:  "module.php", 
        success: function(response){ 
        jQuery('#container').html(response); 
        } 
        }); 
    });

...

<?php

    $moduleHTML = "";  
    $moduleHTML .= '<div id="container">';
    $moduleHTML .= '</div>'; 

?>
//In here some where make sure you are echoing <?php echo $moduleHTML; ?>

在你的 module.php 中更改这里

 $moduleHTML  = '<select name="modules" id="modulesDrop">';  
 $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

     while($sqlstmt->fetch()) { 
         $moduleHTML .= sprintf('<option value="%1$s_%2$s_%3$s">%1$s - %2$s</option>'.PHP_EOL, $dbModuleNo, $dbModuleName, $dbModuleId);
    } 
    $moduleHTML.='</select>';

【讨论】:

  • 我可以在您的代码中看到您没有包含“请选择”选项,您会将此选项放在 while 循环上方吗?
  • @user1930247 只需编辑 - $moduleHTML = '
  • @ubercooluk 即使我应用了你的代码并且我已经有一个回显&lt;th&gt;Module: &lt;?php echo $moduleHTML; ?&gt;&lt;/th&gt;,但它根本不显示下拉菜单。
【解决方案3】:

你应该选择 html 函数而不是像这样的 append jQuery('#modulesDrop').html(response);

【讨论】:

  • 如果我按照您所说的 jQuery('#modulesDrop').html(response); 进行操作,那么它只会显示一个空白下拉菜单
  • 首先,您只需在 jquery ajax 下就成功功能发出消息/响应。如果它显示值,则在所有出现时使用 $ 而不是 jQuery 文本
  • 尝试了您评论的内容,但仍然没有出现模块列表。
猜你喜欢
  • 2013-11-21
  • 1970-01-01
  • 2011-01-18
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2013-07-12
相关资源
最近更新 更多