2016-03-21 7 views
0

コードバスを使用してiOS用のToDoリストスタイルアプリのフォーム入力フィールドがあります。私は、ユーザが以下のような文字を入力できるようにしたいと思う。 %& + しかし、これによりアプリがクラッシュしました。私の一時的な修正は、.keypress関数を使用してフォームフィールドのキー入力を制限することでした。しかし、私は、ユーザーがリスト項目にこれらの文字を含めることができる方法を見つけたいと思います。 (唯一の入力として空白スペースを追加するとアプリがクラッシュすることに気付きました)html5/jqueryモバイルフォーム入力で非英数字を許可する方法

これらの文字の使用を制限する多くのQ + Asが検証されていますが、フォーム入力でそれらを使用するには?

ありがとうございました!

/* Form to make a new list item */ 
    $('.formMain').submit(function() { 
     var key = Date.now(); 
     var text = $('#todo').val(); 
     var textTrim = text.replace(/ /g, '').toLowerCase(); 
     var checked = false; 
     var quantity = $('#quantity').val(); 

     // if the inputs are blank 
     if (text.length == 0) { 
      return false; 
     } 
     // if item already on list 
     else if ($('.list #' + textTrim).length) { 
      alert(text + " already on list!"); 
     } 

     // if the input box is not empty run the template function 
     else if ((text.length > 0) === true) { 
      var html = template(text, textTrim, key, checked, quantity); 
      $('.list').append(html); 
      itemListArray.push({ key: key, text: text, textTrim:textTrim, checked: checked, quantity: quantity}); 
     // Save the item list array 
     if (window.localStorage) { 
      window.localStorage.setItem('itemListArray', JSON.stringify(itemListArray)); 
      } 
      $('#todo').val(""); 
      $('#quantity').val(""); 
     } 
     return false; 
+0

なぜクラッシュしましたか?あなたはキャラクターをまったく検証していますか?エラーは何ですか?どのようにデータを使用していますか? – noahnu

+0

- 私が.keypressの制限を取り除き、入力フィールドに "&"と入力するとアプリがクラッシュする(リップル/ iPhoneが私の "情報"画面をプルアップし、メニューボタン以外の機能が働いている) - アプリを閉じるためにスワイプする必要がある電話と再起動)。 - 上記のデータがどのように使用されているかを示すコードを追加します...ありがとう! –

+0

更新:クラッシュは、textTrim(例: "&")にメタキャラクタがあり、html要素を構築するtemplate()関数を介して送信され、idにtextTrimを代入するとvar = textTrim変数によって引き起こされたようですクラッシュが発生したとき。 textTrim変数がその関数に送られる前にこれらの文字をエスケープしています...うまくいくようです。 –

答えて

0

正しい方向に押していただきありがとうございます。

メタ文字が「textTrim」変数に割り当てられているときにクラッシュが発生していました。問題は、その変数にメタ文字が含まれていて、HTMLタグのIDに割り当てられていると考えられます。 (私は妥当性確認のために項目を一意に識別する方法としてtextTrimを使用しています)。

var textTrim = escapeHtml(text).toLowerCase(); 

問題は、各文字を小数点の値で置き換えるescapeHtml関数を作成することで解決しました。例えば

function escapeHtml(text) { 
    return text 
    .replace(/&/g, "38") // etc 
関連する問題