2011-08-02 104 views
1

忽略了前面的問題 - 這是唯一位我不現在明白了,其他一切作品:變化值選擇

UPDATE:幾乎WORKING

$(document).ready(function(){ 
$("#fileSelect").click(function(){ 
    var myString = <?php 
     $array = array('homeText.txt', 'anotherText.txt' /*ETC*/); 
     $file = $array[/*JS SELECTED INDEX*/]; 
     $path = '../txt/'.$file; 
     include $path; 
     ?> 
     tinyMCE.execCommand('mceReplaceContent',false,myString); 
}); 
}); 

問:如何我會通過所選項目的索引下拉成PHP代碼(從jQuery),這樣我就可以調用相應的項目在數組中返回正確的文件。

+0

JavaScript是沙盒,所以你不能從那裏讀取或寫入文件。 – Shi

+0

我不想 - 我想運行一些PHP當一個js事件被稱爲 –

+1

@Shi:他可以,如果該文件是通過一些web服務器進行訪問。 –

回答

2

您可以使用AJAX中的文件閱讀。 你會添加一個「平變化」功能的下拉菜單,讓每一個用戶改變它時,AJAX功能將火(檢索文件的內容),並插入文本textarea的。

下面是使用PHP在後臺生成文本類似的情況......但是你可以修改,以便它只是調用基礎上,選擇適當的文件(或者,如果你願意,做一個單一的PHP呼應基於一些正確的文本文件GET變量[或POST如果你喜歡])

Populating dropdown - PHP Ajax MySQL

你也想改變數據從下拉列表中的目的地到您的textarea。所以這裏有一些代碼...它使用了假設的getMyText.php(將它傳遞給'文件'變量)並期望文本返回,然後它將放置在textarea中。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<script> 
function changeText(choice){ 
     var xmlhttp; 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     xmlhttp.onreadystatechange=function() 
     { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
      var res=xmlhttp.responseText; 
      document.getElementById("myText").innerHTML=res; 
      } 
      } 
     xmlhttp.open("GET","getMyText.php?file="+choice,true); 
     xmlhttp.send(); 
     } 
</script> 

<select onChange="changeText(this.value)"> 
<option value="opt1">Option1</option> 
<option value="opt2">Option2</option> 
</select> 
<textarea id="myText"></textarea> 

</body> 
</html> 

編輯:使用jQuery

的HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> 
</head> 

<body> 
<script> 
function changeText(choice){ 
$.get('so_getfile.php?file='+choice, function(data) { 
    $('#myText').html(data); 
}); 
     } 
</script> 

<select onChange="changeText(this.value)"> 
<option></option> 
<option value="1">Option1</option> 
<option value="2">Option2</option> 
</select> 
<textarea id="myText"></textarea> 

</body> 
</html> 

PHP的Web服務:

<?php 
$array = array('file1.txt', 'file2.txt'); 
$file = $array[$_GET['file']-1]; 
$text = fopen($file,'r'); 
if ($text) { 
    while (($buffer = fgets($text, 4096)) !== false) { 
     echo $buffer; 
    } 
    if (!feof($text)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($text); 
} 
?> 
+0

它是異步的Javascript和XML(這是一個誤導,但任何反應都可以)...我會在這裏添加一些示例代碼 –

+0

cwallenpoole的框架評論,如果你使用像jQuery這樣的框架,那個函數變成類似'$ .ajax(文件)'的東西...... ...更整潔 –

0

您正在尋找的選擇的 '變' 事件。由於事件可以是不同的瀏覽器之間很不一致,你將最有可能想要一個框架,以幫助:

var sel = document.getElementById("selectbox1"); 

// if older versions of IE 
// use attachEvent instead: sel.attachEvent("onchange", changeHandler); 
sel.addEventListener("change", changeHandler, false); 

function changeHandler(e) 
{ 
    // your selected item can be found this way 
    console.log(sel.options[sel.selectedIndex]) 
    // or this way (technically there can be multiple items selected, 
    // you need to use the 0 index to get the first one.) 
    sel.getSelected()[0] 
} 

您還需要放置在該方法的AJAX請求,所以你必須創建一個XMLHttpRequest。說真的,這是一些你真正應該使用的框架。但是這裏有一個可能的方法:

// if IE: var req = new ActiveXObject("Microsoft.XMLHTTP") 
var req = new XMLHttpRequest(); 
// you are probably going to want to use GET to do this. 
req.open("GET", "result_of_select.php?choice="+ 
       sel.options[sel.selectedIndex].value, true); 
// if you want POST, then you'll have to create the request parameter string 
// and pass it to send 
req.send(); 
req.onreadystatechange = function() { 
if(this.readyState == 2) { 
    document.getElementById("my-text-field").text = req.responseText 
} 
}