2014-02-19 113 views
0

所以我創建<select id="VersionDropdown" onchange="change(this)"></select>裏面的一個php文件,然後通過include標籤拉到另一個php文件。我遇到的問題是onchange從未被解僱。我曾嘗試使用jQuery.change()以及沒有成功。PHP select onchange not working

我使用jQuery 1.9.1

PHP:

<?php 
    // Build the dropdown menu based on files on the server 

    $dropdown = '<select id="VersionDropdown" onchange="change(this)">'; 
    $path = './myPath/'; 
    $blacklist = array('.', '..', 'SQL Files'); 

    foreach (new DirectoryIterator($path) as $root) { 
     if($root->isDot()) continue; 
     $path2 = $path . $root . '/'; 
     $MajorVersion = $root->getFilename(); 
     $MajorVersion = str_replace('v', 'Version ', $MajorVersion); 
     if(fnmatch('Version 3.1', $MajorVersion)){ $MajorVersion = str_replace('Version', 'Analog Version', $MajorVersion); } 
     //$versions[$MajorVersion] = array(); 
     $dropdown .= '<optgroup label="' .$MajorVersion. '">'; 

     foreach (new DirectoryIterator($path2) as $folder) { 
      if($folder->isDot()) continue; 

      $item = $folder->getFilename(); 
      //$versions[$MajorVersion][$item] = array(); 

      if ($handle = opendir($path2 . $item)) { 
       while (false !== ($file = readdir($handle))) { 
        if (!in_array($file, $blacklist)) { 
         if(fnmatch("*.txt", $file)) { 
          $fileNew = str_replace('.txt', '', $file); 
          $versions[$MajorVersion][$item]['Version'] = $fileNew; 
          $dropdown .= '<option value="' .str_replace('Web', '', $item). '">' .$fileNew. '</option>'; 
         }else{ 
          $versions[$MajorVersion][$item][str_replace('.exe', '', $file)] = $file; 
         } 
        } 
       } 
      } 
      closedir($handle); 
     } 
    } 
    $dropdown .= '</optgroup>'; 
    //print_r($versions); 
    $dropdown .= '</select>'; 

    echo $dropdown; 
?> 

HTML/PHP

<html> 
<title>Test Script</title> 
<head> 
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> 
    <title>Test</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script> 

function change(version){ 
    alert(version); 
} 

$(document).ready(function() { 

}); 

</script> 
</head> 
<body> 
    <?php include './php/version_dropdown.php'; ?> 
</body> 
</html> 

version_download.php輸出:

<select id="VersionDropdown" onchange="change(this)"> 
    <optgroup label="Version 5.5"> 
     <option value="55249">5.5.24.9</option> 
     <option value="55225">5.5.22.5</option> 
     <option value="55205">5.5.20.5</option> 
     <option value="55183">5.5.18.3</option> 
     <option value="55163">5.5.16.3</option> 
     <option value="55141">5.5.14.1</option> 
     <option value="55122">5.5.12.2</option> 
     <option value="55106">5.5.10.6</option> 
    </optgroup> 
    <optgroup label="Version 5.0"> 
     <option value="50016">5.0.0.16</option> 
     <option value="50018">5.0.0.18</option> 
     <option value="50022">5.0.0.22</option> 
     <option value="50024">5.0.0.24</option> 
     <option value="50284">5.0.28.4</option> 
     <option value="50304">5.0.30.4</option> 
     <option value="50321">5.0.32.1</option> 
     <option value="50343">5.0.34.3</option> 
     <option value="50403">5.0.40.3</option> 
    </optgroup> 
    <optgroup label="Version 4.3"> 
     <option value="43062">4.3.0.62</option> 
     <option value="43064">4.3.0.64</option> 
     <option value="43066">4.3.0.66</option> 
    </optgroup> 
    <optgroup label="Version 4.2"> 
    </optgroup> 
    <optgroup label="Analog Version 3.1"> 
    </optgroup> 
</select> 
+1

過去有隨機的問題是這樣,目前尚不清楚,這可能永遠工作,除非你表現出更多的碼。當選擇更改時,如何在服務器上調用php代碼? – Floris

+1

你可以發佈一些HTML/PHP代碼嗎?我們無法猜出答案.. –

+0

'change'函數必須在'select'元素後面定義!請添加所有代碼。 – ops

回答

0

你有沒有嘗試過的東西喜歡這個?

$("#VersionDropdown").change(function(){ 
     if($(this).val() == "something") { 
       //do something 
     } 
    }); 
+0

_I嘗試使用jQuery.change()以及沒有success._可能解決此問題 – kero

+0

將您的代碼添加到jsfidlle或張貼它這裏... – SamotnyPocitac

+0

OP可能錯過了'$(document).ready(function(){});' – MonkeyZeus

0

試試這個(編輯):

$("#VersionDropdown>optgroup>option").on('click', function(event) { 
    alert($(this).text()); 
}); 

當你插入一個元素,文檔充電後,你必須使用.on().live()功能,使其工作。

More information @ jQuery

+0

這似乎沒有工作要麼.. – user616

+0

'$(document).on('change',「#VersionDropdown」,函數(){...'你嘗試過這種方法嗎? –

+0

嘗試在HTML中創建選擇並使用php和jQuery填充選項 – aerojun

0

你發送對象的功能onchange="change(this)"

更改功能:

function change(version){ 
    alert(version.value); 
} 

或者變化的onchange到

onchange="change(this.value)" 

JQ上述不需要。

備註只有一個應該作出上述變更。如果你讓這兩個你都會出錯

0

我把你的php代碼的輸出插入到你顯示的html源文件中,給我幾乎的工作。然後,我所要做的就是寫alert(version.value);而不是alert(version);,而且我是在做生意。我不明白爲什麼不爲你工作 - 請確認這對你的作品,或與源代碼,您實際上是從服務器獲取比較:

<html> 
<title>Test Script</title> 
<head> 
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> 
    <title>Test</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script> 

function change(version){ 
    alert(version.value); // <<<<<<<< this line was changed >>>>>>>>>>> 
} 

$(document).ready(function() { 

}); 

</script> 
</head> 
<body> 
<!-- <<<<<<<<<<<<<< inserted php generated code here as plain text >>>>>>>>>>>> --> 
<select id="VersionDropdown" onchange="change(this)"> 
    <optgroup label="Version 5.5"> 
     <option value="55249">5.5.24.9</option> 
     <option value="55225">5.5.22.5</option> 
     <option value="55205">5.5.20.5</option> 
     <option value="55183">5.5.18.3</option> 
     <option value="55163">5.5.16.3</option> 
     <option value="55141">5.5.14.1</option> 
     <option value="55122">5.5.12.2</option> 
     <option value="55106">5.5.10.6</option> 
    </optgroup> 
    <optgroup label="Version 5.0"> 
     <option value="50016">5.0.0.16</option> 
     <option value="50018">5.0.0.18</option> 
     <option value="50022">5.0.0.22</option> 
     <option value="50024">5.0.0.24</option> 
     <option value="50284">5.0.28.4</option> 
     <option value="50304">5.0.30.4</option> 
     <option value="50321">5.0.32.1</option> 
     <option value="50343">5.0.34.3</option> 
     <option value="50403">5.0.40.3</option> 
    </optgroup> 
    <optgroup label="Version 4.3"> 
     <option value="43062">4.3.0.62</option> 
     <option value="43064">4.3.0.64</option> 
     <option value="43066">4.3.0.66</option> 
    </optgroup> 
    <optgroup label="Version 4.2"> 
    </optgroup> 
    <optgroup label="Analog Version 3.1"> 
    </optgroup> 
</select> 
</body> 
</html> 

只是一個其他觀測(我承擔成爲一個錯字;但也許它是你問題的根源)。你是#include ing version_dropdown.php,但你打電話給你正在顯示的內容的文件version_download.php。錯字?或者你的問題的來源...我不得不相信這是一個錯字。

0

我終於明白了。無論出於何種原因,CHROME並未解僱onchange活動!我重新開始鍍鉻,並突然開始工作。瘸。

我已經在好像鍍鉻由於PHP運行服務器端突然開始高速緩存JS .. /捂臉