一个表单验证中,在JS上定义了个变量
<script type="text/javascript">
var oldValues = new Object();"<?php forech($i = 0; $i < count($values[0]); $i++) {"
  oldValues["<?php echo key($values[0]) ?>"] = "<?php echo current($values[0]) ?>"
"<?php } ?>"
</script>
这样虽然可以将后台php传递过来的数组填充到Object中,但是如果数据中有回车的话就会提示错误"未结束的字符串常量"
看了下网页显示的源代码<script type="text/javascript">
''
oldValues['id'] = '49';
''
oldValues['name'] = 'xxx';
''
oldValues['phone'] = '';
''
oldValues['fax'] = '';
''
oldValues['email'] = '';
''
oldValues['desc'] = '备注1
备注2
备注3
备注4
备注5
备注6
备注7
备注8
备注9';
''
</script>JS中字符串不允许换行...但这个desc的数据是从HTML中的textarea文本框中获取到的数据,保存到后台数据就是这样了,而且要在HTML中显示的也应该是这样
表单提交的时候会调用onsubmit()方法
方法中使用
<script type="text/javascript">
  function onsubmit() {
    for(var ol in oldValues) {
      if(oldValues[ol] != document.getElementById(ol).value) {
        isUpdate = 1;  //form表单中的隐藏属性,默认为0,如果表单中数据有一个与原始数据不一样
                       //则将表单提交到后台进行更新,后台更新前先判断isUpdate是否为1,为1才进行更新
        break;
      }
    }
    return true;
  }
</script>
试过在后台传递过来之前就将desc数据中的回车替换为<br>,但这样在textarea中显示的就变成"备注1<br>备注2<br>"这样..
要怎样才能显示成
"备注1
备注2"
这样的呢??如果显示成这样,但oldValues里存放的还是"备注1<br>备注2<br>",那提交前也得先把textarea里的数据替换回来吧...该如何替换呢??

解决方案 »

  1.   

    对了...

    <script type="text/javascript">
                ''
                    oldValues['id'] = '49';
                ''
                    oldValues['name'] = 'xxx';
                ''
                    oldValues['phone'] = '';
                ''
                    oldValues['fax'] = '';
                ''
                    oldValues['email'] = '';
                ''
                    oldValues['desc'] = '备注1
    备注2
    备注3
    备注4
    备注5
    备注6
    备注7
    备注8
    备注9';
                ''
            </script>
    这里显示了几个'',应该就是
    "<?php forech($i = 0; $i < count($values[0]); $i++) {"
    "<?php } ?>"
    这2句话导致的...可是在JS代码中不这样不行啊...有什么办法让那几个''不出现吗?
      

  2.   

    <html>
      <script type="text/javascript">
        function ol() {
          alert(document.getElementById('pp').innerHTML);
        }
        function ol2() {
          document.getElementById('pp').innerHTML = "sdf \r\n sdgl";
        }
      </script>
      <body>
        <input type="button" value="textarea_value" onclick="ol()" />
        <input type="button" value="write_textarea" onclick="ol2()" />
        <textarea name="textarea" cols="100" rows="13" id="pp">
        </textarea>
      </body>
    </html>
    这样有没用啊...显示出来的就一个空格...
    \n   \\n  \\r\\n 都试过了...一样...
    <br>的话,触发函数的时候IE8提示“消息: 未知的运行时错误”
      

  3.   


    <html>
      <script type="text/javascript">
        function ol() {
          alert(document.getElementById('pp').innerHTML);
        }
        function ol2() {
       var aa = 'hi'+'\n'+'helle';
          document.getElementById('pp').value = aa;
        }
      </script>
      <body>
        <input type="button" value="textarea_value" onclick="ol()" />
        <input type="button" value="write_textarea" onclick="ol2()" />
        <textarea name="textarea" cols="100" rows="13" id="pp">
        </textarea>
      </body>
    </html>试试吧,你给他的value,他自动把\n转换成htmlcode
    否则你要自己把换行符号转换成htmlcode
      

  4.   


    感谢!!终于解决了...
    在提交到后台前,用JS将textarea里的数据转换一下var txtareas = document.getElementsByTagName('textarea');
    for(var i = 0; i < txtareas.length; i++) {
      //之所以用<br__>是想说如果换回来的时候刚好原本的内容有<br>的话,那就会被替换掉...
      txtareas[i].value = txtareas[i].value.replace(/\r\n/g,"<br__>");
    }然后后台传递到前台的时候,则在body的onload事件中将数据转回来function init() {
      document.getElementById('desc').value = "<?php echo $values[0][ 'desc'] ?>".replace(/<br__>/g,"\r\n");
    }这样数据库中存储的就是类似
    “士大夫 <br__>士 受到<br__>受到    sdkjfkj     kljsdf<br__>sdfkjklsjdlf”
    这样的...这样在初始化oldValues的时候就不会出现未结束常量的错误了...
    十分感谢xuetao121!!
      

  5.   

    ............本来想说在textarea里绝对无法使用tab键的,所以直接把\r\n替换为\t
    然后显示的时候再逆过来
    在HTML里倒是可以...
    但是存到mysql数据库里,\t既然就变为空格了...