Posted by 390831 on February 27, 2012 at 9:43am
drupal7でモジュールを作成しています。
以下のようにtextfieldの属性にonKeyUpイベントを追加しました。
$jsarg = "AjaxZip2.zip2addr(this,'pref','addr');";
$form = array();
$form['zip'] = array(
'#type' => 'textfield',
'#size' => 9,
'#maxlength' => 7,
'#required' => TRUE,
'#attributes' => array('onKeyUp' => $jsarg),
);
HTMLを出力させたところ、「'」→「'」とシングルコートがエスケープされてしまいました。
エスケープさせないようにするにはどのようにしたらよいのでしょうか?
*出力されたHTML
onKeyUp="AjaxZip2.zip2addr(this,'pref','addr');"
↓
onKeyUp="AjaxZip2.zip2addr(this,'pref','addr';);"
でエスケープさせずに出力したい。
宜しくお願いします。
Comments
多分無理です
ソースを読んでみましたが、#attributesに渡した値をdrupal_attributes関数で出力文字列に変換しますが、drupal_attributesの中で更にcheck_plain関数を通しています。
この問題で最終的に達成したい目標は「エスケープさせないで出力する」ではなく、「特定のinputフィールドのkeyupイベントで、AjaxZip2.zip2addrを実行する」ですので、回避方法としては、JavaScript側で
$('#edit-zip').bind('keyup', function(){ var elem = document.getElementById('edit-zip'); AjaxZip2.zip2addr(elem,'pref','addr';); });みたいな感じでしょうか。
// この通りに書いてちゃんと動くかどうかは、保証しません。
// もうちょっとスマートに書けそうな気もしますが。
ありがとうございました
ご提案内容でJavaScript側で実装したところ旨く動作しました。
ありがとうございました。