[英]PHP select onchange not working
因此,我在php文件中創建<select id="VersionDropdown" onchange="change(this)"></select>
,然后通過include
標記將其拉入另一個php文檔。 我遇到的問題是onchange
永遠不會觸發。 我也嘗試使用jQuery.change(),但沒有成功。
我正在使用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>
你嘗試過這樣的事情嗎?
$("#VersionDropdown").change(function(){
if($(this).val() == "something") {
//do something
}
});
試試這個(編輯):
$("#VersionDropdown>optgroup>option").on('click', function(event) {
alert($(this).text());
});
當您插入元素時,在文檔收費后,您必須使用.on()
或.live()
函數使其起作用。
您正在將對象發送到函數onchange="change(this)"
將功能更改為:
function change(version){
alert(version.value);
}
或將onchange更改為
onchange="change(this.value)"
上面不需要jQuery。
注意僅應進行上述更改之一 。 如果兩者兼而有之,那就會出錯
我將您的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
version_dropdown.php
,但是您調用了顯示了version_download.php
內容的文件。 錯別字? 還是您問題的根源...我必須相信這是一個錯字。
我終於想通了。 無論出於何種原因,CHROME均未觸發onchange事件!。 我重新啟動了chrome,然后突然開始工作了。 瘸。
過去,我曾經遇到過類似的隨機問題,好像Chrome突然開始緩存JS .. / facepalm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.