2012-01-05 44 views
2

這是一個非常簡單的PHP頁面,其中包含一個JavaScript函數。我看到輸出不同。我無法理解它爲什麼這樣表現。有趣的輸出在一個簡單的PHP網頁

在下面的代碼中,x回顯爲012012,但是當我將它傳遞給javascript函數並將其顯示在innerHTML中時,它的顯示方式與5130不同?

任何人都可以幫忙嗎?

<?php 
    $x= date("mY"); 
    echo $x; 
?> 
<html> 
    <head> 
     <script> 
      function myfunc1(y) 
      { 
       div1 = document.getElementById("mydiv1") 
       div1.innerHTML = y; 
      } 
     </script> 
    </head> 
    <body <?php echo "onload='myfunc1(".$x.")'>";?> 
    <div id="mydiv1" style="background:#efefef;border:1px solid green;height:100px;width:100px;text-align:center"> 
    </div> 
    </body> 
</html> 

HTML輸出

012012<html> 
    <head> 
     <script> 
      function myfunc1(y) 
      { 
       div1 = document.getElementById("mydiv1") 
       div1.innerHTML = y; 
      } 
     </script> 
    </head> 
    <body onload='myfunc1(012012)'> <div id="mydiv1" style="background:#efefef;border:1px solid green;height:100px;width:100px;text-align:center"> 
    </div> 
    </body> 
</html> 

HTML輸出(截圖) Screenshot

+1

w ^歡迎您不要指定您的號碼類型,並將JavaScript解析爲八進制。另外,你在'html'文檔根目錄外(這是無效的)回顯你的'x'變量。同樣你已經發布了你的服務器端腳本,但沒有發佈你的HTML。這使得它更難以理解JavaScript的工作內容(不是不可能,更難)。 – 2012-01-05 15:16:41

+0

粘貼HTML源代碼向我們展示您的PHP輸出。 – Stefan 2012-01-05 15:17:03

+1

您的'body'標籤沒有正確結束。試試'');」>' – Stefan 2012-01-05 15:19:08

回答

1

這是發生,因爲012012被視爲一個int。但是,因爲它從0開始,JavaScript會將其視爲基數8(八進制),因此將其轉換爲5130

您需要用引號括起012012,所以JavaScript會將它視爲字符串。另外,我建議只使用PHP來回顯您需要的值,而不是整個函數調用。使其更容易調試稍微

<body onload="myfunc1('<?php echo $x;?>')"> 
+0

我用你評論中提供的正文聲明取代了我的正文聲明,並且正常工作。謝謝。 – 2012-01-05 15:28:44

+0

@KaushalBhatt:不客氣:-) – 2012-01-05 15:29:31

+0

認真嗎?一票倒退? – 2012-01-25 23:00:44

7

因爲與0前綴的數字是由JavaScript作爲八進制處理。

0
<body <?php echo "onload='myfunc1(".$x.")'>";?> 

應該

<body <?php echo "onload='myfunc1(".$x.")'>";?>> 

body標籤未關閉

+1

我個人建議它應該是')「>' – 2012-01-05 15:20:19

+0

我完全同意。 – 2012-01-05 15:21:53

+0

@DavidThomas:'<?php echo「$ x」; ?>'。在'$ x'周圍的''''是無用的,只要做'echo $ x'。 – 2012-01-05 15:22:58

1

使用Smarty,是一個框架模板PHP!

PHP代碼:

<?php 
    $foo = date('Y'); 
?> 

簡單的打印PHP代碼

<body onload="myFunctionJS('<?php echo $foo;?>')"> 

簡單的標籤PHP(不推薦)

<body onload="myFunctionJS('<?=$foo;?>')"> 

使用SMARTY模板框架

Smarty的模板框架(PHP代碼):

<?php 
    $smarty = new Smarty; 
    $var = date('Y'); 
    $smarty->assign('foo' , $var); 
?> 

Smarty的模板框架(模板代碼):

<body onload="myFunctionJS('{$foo}')"> 
+1

@Olaf Erlandsen肯定會檢查出...感謝您的建議 – 2012-01-05 15:31:41