2011-10-05 17 views
3

我有我的網站的形式運行,當用戶點擊提交,提交表單之前一些基本的JS驗證,但我得到一個錯誤「未結束的字符串」當檢查一些字段時。我如何修復JS「未結束的字符串常量」錯誤

我明白這是什麼錯誤(用戶在這種情況下,添加換行符在一個文本),但我想不出避免/修復它的一種方式。

這裏是我聲明的形式 -

<form id="<?php echo $form_name; ?>" 
     name="<?php echo $form_name; ?>" 
     class="standard-form" 
     method="POST" action="" 
     onsubmit="return validate_form('<?php echo $form_name; ?>')"> 

這裏是我如何檢查,是造成我的麻煩領域 -

var your_query = document.forms['enquiry']['your_query'].value 
if(your_query === ''){ 
    result = false; 
} 

這裏任何幫助將appriciated。

謝謝。

+0

未終結的字符串文字通常是由JavaScript表達式中使用的轉義值造成的,但目前還沒有任何在你的代碼張貼(除非你有一個瘋狂的表單名稱) - 你確定你發佈錯誤發生的地方? –

+0

這種情況下的錯誤是因爲用戶有時會在'your_query'字段中添加換行符,這是一個textarea。你是對的,儘管這個錯誤是在我剛開始想到的過程中產生的,但是當時我正在把一個對象傳遞給一個AJAX頁面 - 通過PHP來寫一個具有換行符的值是實際上是什麼造成這種情況,而不是簡單的換行符。 –

+0

@戴夫牛頓 - 不是'返回validate_form( '')'在JavaScript表達式中使用的反向轉義值? –

回答

4

我的猜測是$form_name包含一個單引號字符:'

首先,你應該逃脫輸出與htmlentitiesjson_encode

<form id="<?php echo htmlentities($form_name); ?>" 
     name="<?php echo htmlentities($form_name); ?>" 
     class="standard-form" 
     method="POST" 
     action="" 
     onsubmit="return validate_form(<?php echo htmlentities(json_encode($form_name)); ?>)"> 

參見Pass a PHP string to a Javascript variable (including escaping newlines)

其次,不要」 t使用onsubmitintrinsic event attribute並且不要將表單名稱傳遞給它;使用正確的DOM腳本(或jQuery的)和事件處理的JavaScript文件中:

(function() { 
    var form = document.getElementById("<?php echo json_encode($form_name); ?>"); 
    form.addEventListener('submit', onSubmit, false); 

    function onSubmit() { 
     // manipulate variable `form` as necessary 
     // without having to pass around a `form_name` 
    } 
}()); 
+0

不得不作出更正; 'json_encode'在JavaScript中不需要用引號引起來。 –

+0

感謝您的建議。我會採取你說的不使用onSumbit()(可能不是今天,但!),但同時'json_encode()'讓我越過了原來的錯誤(謝謝),但現在我們回到了PHP的一面,所有的值都被包裝了(/「{value} /」) ,而'json_decode()'沒有像我想的那樣返回。有什麼建議嗎? –

+0

@Daveid Gard - 我不遵循你的意思,在PHP的一面。 –

相關問題