如何从Javascript中的PHP代码中逃脱?

时间:2017-01-25 09:52:55

标签: javascript php

var i = 1; 
$("#add_row").click(function(){

    var arr = "<tr><td><input type='hidden' name='counter' value='" + i + "'><input type='hidden' id='pd-id-" + i + "' name='pd-id-" + i + "'><input autocomplete='off' type='text' id='pd-search-" + i + "' class='hahaha'><ul style='width: 44.8vw' class='livesearch' id='pd-result-" + i + "' onclick='clickResult()'></ul></td><td><input type='text' required name='workdescription-" + i + "'></td><td><select></select></td><?php

    $date = new DateTime();

    $y=1;


    if (date('d') < '18' AND date('d') > '2') {
        for ($x = 1 ; $x <= 16 ; $x++) {
            echo "<td><input type='text' name='hr-" . i . "-" . $x . "'></td>";
        }
    } else if (date('d') < '3') {
        for ($x = 16 ; $x <= date('t', strtotime(date('Y-m')." -1 month")) ; $x++) {
            echo "<td><input type='text' name='hr-" . i . "-" . $y . "'></td>";
            $y++;
        }
    } else {

        for ($x = 16 ; $x <= date('t') ; $x++) {
            echo "<td><input type='text' name='hr-" . i . "-" . $y . "'></td>";
            $y++;
        }

    }

    $i++;

    ?></tr>"
    ;

    i++;

    $( "#tablebody" ).append(arr);
});

我需要在PHP的回声中逃避字母i。我希望他们在顶部有javascript变量i的值。我怎么能这样做?还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

尝试这样的回声:

echo "<td><input type='text' name='hr-' + i + '-" . $x . "'></td>";

请记住,所有的PHP代码都在服务器端完全解析。 Javascript是客户端。不要混淆javascript和php语法。与.结束是php,+是等效的javascript。同时使用引号。例如。 php中的"和javascript中的'。如果您在Javascript中需要",请将其转义为:\"

答案 1 :(得分:0)

正如我在上面的评论中所说,在这种情况下,不需要PHP。您只能使用Javascript解决它。要正确回答您的问题,这里有一个使用Javascript和PHP的可能解决方案。

<table id="my-table">
    <tr>

    </tr>
</table>

<template id="my-template">
    <td><input type="text" name=""></td>
</template>

<script>
    var day = '<?= (new DateTime())->format('d') ?>',
        daysOfMonth = '<?= (new DateTime())->format('t') ?>',
        daysOfMonthOneMonthBefore = '<?= (new DateTime('-1 month'))->format('t') ?>',
        template = document.getElementById('my-template'),
        i = 1,
        y = 1;

    var positiveInt = new Number(day),
        positiveIntOneMOnthBefore = new Number(daysOfMonthOneMonthBefore),
        inputElement = template.content.querySelector('input');

    if (positiveInt < 18 && positiveInt > 2) {
        for (var x = 1; x <= 16; x++) {
            inputElement.name = 'hr-' + i + '-' x;
            var clone = document.importNode(template.content, true);
            document.querySelector('#my-table tr').appendChild(clone);
        }
    } else if (positiveInt < 3) {
        for (var x = 16; x <= positiveIntOneMOnthBefore; x++) {
            inputElement.name = 'hr-' + i + '-' + y;
            y++;

            var clone = document.importNode(template.content, true);
            document.querySelector('#my-table tr').appendChild(clone);
        }
    } else {
        for (var x = 16; x <= positiveInt; x++) {
            inputElement.name = 'hr-' + i + '-' + y;
            y++;

            var clone = document.importNode(template.content, true);
            document.querySelector('#my-table tr').appendChild(clone);
        }
    }
</script>

正如您所说,您只需要服务器的实际日期。其余代码使用本机javascript完成。你甚至不需要jQuery。此代码示例未经过测试。此代码使用HTML5元素,如template标记。确保使用正确的HTML5文档类型。除此之外,它应该向您展示如何解决您的问题。