2

かなり長い間悩まされてきた小さな問題がありますが、自分で解決できないようです。私はそれをグーグルで調べましたが、本当に役立つものは何も見つかりませんでした。他の誰かがこの問題に遭遇したか、将来遭遇する可能性があるので、お互いに助け合うことができるのではないかと思いました。

問題; プロジェクトを含むドロップダウン リストを作成しました。このドロップダウン リストの下にテキストエリアがあります。ユーザーがドロップダウン リストからプロジェクトを選択すると、そのコンテンツがテキストエリアに読み込まれます。テキストエリアにテキストを追加すると、スペースバーを押すか入力するたびに自動的に保存されます。ただし、問題は、PHP がテキストの前に 2 つの改行を追加するように見えることです。これを説明するためにいくつかのスクリーンショットを作成しました。

  1. 最初の画像は、Mysql データベース内のテキストを示しています。
  2. コンテンツをテキストエリアに表示するときに、最初の 2 行が何らかの形でスキップされていることがわかります。メモ帳の外観は、テキストエリア内に設定した単なる背景画像です。
  3. テキストを追加してスペースバーを押すと、コンテンツが保存され、Mysql では最初の行がスキップされます。
  4. コンテンツのテキストエリアでは、画像でわかるように行をスキップします。

スクリーンショット: http://s9.postimg.org/suh6u3a7j/1234.png

なぜこれが起こっているのか誰にも分かりますか?どうすれば解決できますか?

これはいくつかのコードです。

<script>
  $(function(){
  $("textarea[id='projectcontent']").keypress(function(e) {
      //13 maps to the enter key
      if (e.keyCode == 13 || e.which == 13 || e.keyCode == 32 || e.which == 32 || e.keyCode == 8 || e.which == 8) {
          saveContent();
      }
  });
});

<script>
        function getContent()
        {
            var mail = $("#email").val();
            var project = $("#projects").val();

            $.ajax({
                type : "POST",
                url : "/includes/projects.php",
                data : "project=" + project+  "&email=" + mail+ "&mode=get",
                success : function(result)  {  $("#projectcontent").val(result);  }
            });
        }
    </script>

<script>
        function saveContent()
        {
            var mail = $("#email").val();
            var project = $("#projects").val();
            var projectcontent = $("#projectcontent").val();

            $.ajax({
                type : "POST",
                url : "/includes/projects.php",
                dataTyp: 'html',
                data : "project=" + project+  "&email=" + mail+ "&projectcontent=" +projectcontent+ "&mode=save",
                success : function(result)  {  $("#response").val(result);  }
            });
        }
    </script>

そして、ドロップダウンとテキストエリア

<div id="project">
        <?php
        $projects = new project();
        $projects = $projects->getProjects($_SESSION['user']);?>
        <form><select id="projects" onchange="getContent()"><option>Select project</option>
            <?php
            foreach($projects as $project)
            {?>
                <option value="<?php echo $project['id'];?>"><?php echo $project['name']; ?></option>
            <?php
            }
            ?>
        </select><input type="hidden" id="email" value="<?php echo $_SESSION['user']; ?>" /></form><span id="response"></span><br /><textarea id="projectcontent" onkeydown="enterkey()"></textarea>
        </div>

そして、コンテンツを保存するための PHP コード。

//set project content
public function setProjectContent($projectid, $email, $projectcontent) {
    $spc    =   $this->db->prepare('update projects set content=? where id=? and owner=?');
    $spc->execute(array(trim($projectcontent, ""), $projectid, $email));
    if ($spc->rowCount()==1){
        $message = "Saved";
    }
    else {$message = "Not saved";}
    return $message;
}

そして、コンテンツを取得するための PHP コード。

//get project content
public function getProjectContent($projectid, $email) {
    $this->projectid= $projectid;
    $this->email = $email;
    $gpc    =   $this->db->prepare('select content from projects where id=? and owner=?');
    $gpc->execute(array($projectid, $email));
    $result =   $gpc->fetch();
    $content = $result['content'];
    return $content;
}

編集:わかりました、問題は解決しました。これは他の誰かに役立つかもしれません。問題は、インクルード ファイルの 1 つに空白が含まれていたことです。空白を削除すると、この問題は解決しました!

4

2 に答える 2

1

$("#projectcontent").val(result);これはテキストエリアに値を設定しているコードですよね?innerHtml()次に、代わりに js 関数を使用できます。また、テキストエリアのコンテンツを保存しながら、$.trim($var)トリミングする機能を実行できます。

于 2013-06-01T17:27:08.697 に答える