在下拉选择中更改文本区域的值

Posted

技术标签:

【中文标题】在下拉选择中更改文本区域的值【英文标题】:Change value of textarea on dropdown select 【发布时间】:2011-10-18 14:13:02 【问题描述】:

忽略上一个问题 - 这是我现在唯一不明白的一点,其他一切都可以:

更新:几乎可以正常工作

$(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),以便我可以调用数组中的适当项目以返回正确的文件。强>

【问题讨论】:

javascript 是沙盒化的,因此您无法从那里读取或写入文件。 我不想 - 我想在调用 js 事件时运行一些 php @Shi:如果文件可以通过某些网络服务器访问,他可以。 嗯,是的。但这对于脚本来说是透明的。如果内容是通过 HTTP 获取的,它可以来自任何地方——数据库、文件、代理流或其他任何地方。因此,对 file 的强调有点烦人。 我不确定(给定已接受的答案)您是否仍有问题,所以我在我之前的代码下面添加了 jQuery 版本...您在上面的代码中的问题是 PHP 运行在 JS 之前...所以您需要将 PHP 取出并将其形成为 Web 服务...然后 JS 会将选择值发送到该服务,并且该服务将回显文件内容...然后您弹出到文本区域 【参考方案1】:

您可以使用 AJAX 读取文件。 您将在下拉列表中添加一个“onchange”函数,这样每次用户更改它时,ajax 函数都会触发(检索文件内容)并将该文本插入到 textarea 中。

这是在后台使用 PHP 生成文本的类似情况...但是您可以对其进行修改,使其仅根据选择调用适当的文件(或者,如果您愿意,可以创建一个 PHP 文件根据某些 GET 变量 [或 POST,如果您愿意] 来回显正确的文本)

Populating dropdown - PHP Ajax mysql

您还将数据的目的地从下拉列表更改为您的文本区域。所以这里有一些代码......它使用假设的 getMyText.php(将 'file' 变量传递给它)并期望返回文本,然后将其放置在 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 网络服务:

<?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);

?>

【讨论】:

它是异步 Javascript 和 XML(虽然用词不当,任何响应都可以)...稍后我将在此处添加一些示例代码 对于 cwallenpoole 的框架 cmets,如果您使用 jQuery 之类的框架,则该函数会变成类似于 $.ajax(file)...的东西【参考方案2】:

您正在寻找选择的“更改”事件。由于不同浏览器之间的事件可能非常不一致,因此您很可能需要一个框架来提供帮助:

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
 

【讨论】:

以上是关于在下拉选择中更改文本区域的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在更改时动态显示文本区域的值? [关闭]

如何更改可调整大小的文本区域的光标?

如何让突变观察者检测文本区域的值变化?

使用 ASP.net 更改 HTML 文本区域中的字体名称和大小

如何根据下拉更改 TextArea 验证

如何在javascript中检索文本区域的值