web-dev-qa-db-ja.com

テキストエリアで改行文字を防ぐ方法

Drupal 7のモジュールでフォームを作成しています。次の行でテキストがオーバーフローするように複数行にしたいので、textareaを追加したいのですが、私はしませんそれが理にかなっている場合、ユーザーが新しいラインを作成できるようにしたくないのですが、どうすればこれを達成できますか?

また、textareaに「すべて選択」ボタンを追加したいと思います この記事をフォローしました が機能しないようです。

質問の最初の部分は解決済みですが、それでも[すべて選択]ボタンが機能しません。 Javascript関数はconsole.logを追加して実行できることを確認しましたが、機能しません。発生するのはページのリロードだけで、テキスト領域でテキストが選択されていません。

1
Andy

JQueryを使用するオプションがある場合は、次のようなことができます。

$('#yourTextAreaID').keyup( function() {
  $(this).val( $(this).val().replace( /\r?\n/gi, '' ) );
});

このコードは、ユーザーが入力した後、その場で改行文字を置き換えます。このコードは、サイトのすべてのページに含めるテーマのcustom.jsファイルに追加できます。または、カスタムモジュールで hook_form_FORM_ID_alter を代わりに使用して、 drupal_add_js 関数を使用して、特定のフォームの編集ページにのみ特定のjsファイルを追加します。

ユーザーのブラウザでJavascriptが無効になっている場合、改行文字を挿入できることに注意してください。これを防ぐには、フォームにカスタム検証関数を追加する必要があります。これを行う方法に関する非常に優れたチュートリアルは、 こちら にあります。最も重要な部分は次のとおりです。

1) hook_form_FORM_ID_alter を使用します(チュートリアルでは、hook_form_alterで旧式のアプローチを使用しています)。

2)次のようなもので追加の検証関数を追加します。

array_unshift($form['#validate'], 'MYMODULE_form_validate');

3)$ form_state変数のtextareaの値で\ r?\ nをチェックするカスタム検証関数(名前はMYMODULE_form_validate)を記述し、改行文字がある場合は説明エラーを返します。

質問の2番目の部分については、何がうまくいかなかったかについての情報を追加する必要があります。手順を実行した後、キャッシュをクリアしましたか?ログメッセージでエラーが発生しましたか? JavaScriptに console.log を追加して、実行されていることを確認しましたか?

3
F1234k