2017-01-25 2 views
-5
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의 값을 상단에 갖기를 원한다. 어떻게해야합니까? 또한이 작업을 수행하는 더 좋은 방법이 있습니까?Javascript에서 PHP 코드를 어떻게 피할 수 있습니까?

+0

그리고 'arr' 변수는 어디에 있습니까? –

+1

왜 자바 스크립트/jquery 함수 안에서 PHP를 사용합니까? 나는 이것을 필요가 없다. Javascript는 자체 DateTime 객체와 for 루프를 가지고 있습니다. 자바 스크립트로만 문제를 해결할 수 있습니다. – Marcel

+0

클라이언트 측 날짜가 틀리면 잘못된 것입니다. 서버 측에서만받은 날짜가 필요합니다. 정확성을 위해. – ToldarkenHansam

답변

0

위의 주석에서 말했듯이이 경우에는 PHP가 필요하지 않습니다. 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가 필요하지 않습니다. 이 코드 예제는 테스트되지 않았습니다. 이 코드는 template 태그와 같은 HTML5 요소를 사용합니다. 올바른 HTML5 doctype을 사용하고 있는지 확인하십시오. 그 외에도 문제를 해결하는 방법을 제시 할 수 있어야합니다.

+0

고마워요,이게 내 문제를 해결했습니다. – ToldarkenHansam

0

이처럼 에코을 시도해보십시오

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

모든 PHP 코드가 완전히 구문 분석 된 서버 측을 얻는 것을 기억하십시오. Javascript는 클라이언트 측입니다. javascript와 PHP 구문을 혼동하지 마십시오. .과 연결된 PHP는 +과 동등한 JavaScript입니다. 따옴표를 일관되게 사용하십시오. 예 : PHP에서는 "이고 자바 스크립트에서는 '입니다. 자바 스크립트에 "이 필요하면 다음과 같이 탈출하십시오 : \".

관련 문제