2

我在 PHP 中使用了 knockout.js,我正在尝试发出一个 GET 请求,然后返回一个 HTML/knockout 表单。这样做的原因是因为表单将被其他人使用,而不是复制/粘贴相当大的代码块,它只是向我的服务器发出请求而返回 HTML/knockout 的代码更少。

//code on another server to request form from my server
$.ajax({
      //request here
    })
</script>

<div id = "update_div">
        <!--form data goes here when received -->
</div>

现在,这是我服务器上的代码。问题出在哪里,因为我必须使用 php 回显并且我正在返回文本,所以我需要在我正在回显的文本周围使用单引号或双引号。但是,我使用了 knockout.js 和一个需要单引号和双引号的 knockout.js 验证插件,基本上取消了环绕回声的引号。

例如,

 <?
    if($_GET['something']){
       echo '
         <tr>
            <td>Full Name</td>
            <td><span data-bind="validationOptions: { insertMessages: false}">
            <input type="text" data-bind="value: fullName, valueUpdate: 'afterkeydown'"/></span></td> 
            <td data-bind="validationMessage: fullName"></td>
        </tr>
       ';
     }
 ?>

具体导致问题的行是

<input type="text" data-bind="value: fullName, valueUpdate: 'afterkeydown'"/></span></td>

返回的错误是

Parse error: syntax error, unexpected 'afterkeydown' (T_STRING)

当我回显时,我使用单引号,因为我想将其作为文本返回,但是,在其中我需要对不同的元素使用单引号和双引号。有没有解决的办法?

4

4 回答 4

4

尝试这个 -

<?
    if($_GET['something']){
       echo '
         <tr>
            <td>Full Name</td>
            <td><span data-bind="validationOptions: { insertMessages: false}">
            <input type="text" data-bind="value: fullName, valueUpdate: \'afterkeydown\'"/></span></td> 
            <td data-bind="validationMessage: fullName"><center></center></td>
        </tr>
       ';
     }
 ?>
于 2013-06-19T11:45:40.987 回答
3

你需要逃离他们

echo '
     <tr>
        <td>Full Name</td>
        <td><span data-bind="validationOptions: { insertMessages: false}">
        <input type="text" data-bind="value: fullName, valueUpdate: \'afterkeydown\'"/></span></td> 
        <td data-bind="validationMessage: fullName"><center></center></td>
    </tr>
   ';
于 2013-06-19T11:46:33.187 回答
2

PHP 是一个超文本预处理器,您可以编写原始 HTML 而无需使用echo[并得到这样的报价噩梦]:

<?php if($_GET['something']): ?>

 <tr>
    <td>Full Name</td>
    <td><span data-bind="validationOptions: { insertMessages: false }">
    <input type="text" data-bind="value: fullName, valueUpdate: 'afterkeydown'"/></span></td> 
    <td data-bind="validationMessage: fullName"><center></center></td>
</tr>

<?php endif; ?>

[看看 SO 语法高亮现在如何正常工作!]

顺便说一句,<center>标签自 HTML 4 以来已被弃用。

于 2013-06-19T11:48:37.567 回答
1

每当您有这样的文字时:

TEXT 'LIKE' THIS

如果你想回显它,只需在 ' 前面加上 \:

echo 'asdfadsf\'asdfasdf'

所以在你的情况下:

echo '
 <tr>
    <td>Full Name</td>
    <td><span data-bind="validationOptions: { insertMessages: false}">
    <input type="text" data-bind="value: fullName, valueUpdate: \'afterkeydown\'"/></span></td> 
    <td data-bind="validationMessage: fullName"><center></center></td>
</tr>

';

于 2013-06-19T11:46:36.623 回答