prototype.js¤ÎÍøÍÑÎ㡧¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼»þ¤Ë¥Æ¥­¥¹¥È¤òÊÔ½¸¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë?

¤ªÌ䤤¹ç¤ï¤»¥Õ¥©¡¼¥à¤Ç¤Ï³Îǧ²èÌ̤¬É½¼¨¤µ¤ì¤ë¤³¤È¤¬Â¿¤¤¤Ç¤¹¤¬¡¢¤½¤Î²èÌ̾å¤Çɽ¼¨¤µ¤ì¤ë³Æ¥Ç¡¼¥¿¤ËÂФ·¤Æ¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼¤¹¤ë¤È¨¤½¤Î¾ì¤Ç½¤Àµ¤Ç¤­¤ë¤ÈÊØÍø¤«¤Ê¤È»×¤¤¡¢¤½¤ÎÊýË¡¤òõ¤·¤Æ¡¢¼ÂÁõ¤·¤Æ¤ß¤Þ¤·¤¿¡£Google Calendar¤ÎͽÄê¾ÜºÙÊÔ½¸²èÌ̤εóÆ°¤È¥¤¥á¡¼¥¸¤·¤Æ¤¤¤ë¤³¤È¤ÏƱ¤¸¤Ç¤¹¡£

ºÇ½é¤Ë³Îǧ²èÌ̤ÎHTML¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡Ê¤´¤¯¤´¤¯´Êñ¤Ë¡Ë

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <script type="text/javascript" src="prototype.js"></script>
</head>
<body>
 <table>
   <tr>
       <td>²ñ¼Ò̾</td><td>¥¢¡¼¥¯¥¦¥§¥Ö</td>
   </tr>
   <tr>
       <td>¤ªÌ¾Á°</td><td>¿ÊÃÏ</td>
   </tr>
 </table>
 <form action="" method="post">
   <input type="hidden" name="company" value="¥¢¡¼¥¯¥¦¥§¥Ö" />
   <input type="hidden" name="name" value="¿ÊÃÏ" />
   <input type="submit" name="submit" value="Á÷¿®" />
 </form> 
</body>
</html>

²ñ¼Ò̾¤È¤ªÌ¾Á°¤È¤¤¤¦Æó¤Ä¤Î¹àÌܤ¬É½¼¨¤µ¤ì¡¢hidden¥Ñ¥é¥á¡¼¥¿¤È¤·¤Æ¤â»ý¤Ã¤Æ¤¤¤ë¤È¤¤¤¦Èó¾ï¤Ë¥·¥ó¥×¥ë¤ÊÎã¤Ç¤¹¡£¤³¤Î²ñ¼Ò̾¤È¤ªÌ¾Á°¤ÎÃÍ¡¢Îã¤Ç¸À¤¨¤Ð¡¢¥¢¡¼¥¯¥¦¥§¥Ö¤È¿ÊÃϤ˥ޥ¦¥¹¥ª¡¼¥Ð¡¼¤·¤¿»þ¤Ë¡¢¤½¤ì¤¾¤ì¤¬Ã±¤Ê¤ë¥Æ¥­¥¹¥Èɽ¼¨¤«¤é¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤ËÊѲ½¤¹¤ë¤è¤¦¤Ë¤·¤¿¤¤¡£¤½¤·¤Æ¡¢Ãͤνñ¤­´¹¤¨¤ò¹Ô¤¤¡¢¤½¤Î¤Þ¤ÞÁ÷¿®¥Ü¥¿¥ó¤ò²¡¤¹¤È¤ªÌ䤤¹ç¤ï¤»¥Õ¥©¡¼¥à¥×¥í¥°¥é¥à¤ËÂФ·¤Æ½ñ¤­´¹¤¨¤¿ÃͤòÁ÷¿®¤·¤¿¤¤¡£¤³¤³¤Þ¤Ç¤¬º£²ó¤ä¤ê¤¿¤¤¤³¤È¤Ç¤¹¡£prototype.js¤ò»È¤¦¤Î¤ÇËÁƬ¤Ç¥í¡¼¥É¤·¤Æ¤ª¤­¤Þ¤¹¡£¤Þ¤¿¡¢Ê¸»ú¥³¡¼¥É¤ÏUTF-8¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£

¼¡¤Ë¡¢¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼¤òÊä­¤¹¤ë¤¿¤á¤ËUI¤Î½àÈ÷¤ò¤·¤Þ¤¹¡£

   <tr>
       <td>²ñ¼Ò̾</td><td id="company_val">¥¢¡¼¥¯¥¦¥§¥Ö</td>
   </tr>
   <tr>
       <td>¤ªÌ¾Á°</td><td id="name_val">¿ÊÃÏ</td>
   </tr>
   ¡§
   ¡§
   <input type="hidden" id="company" name="company" value="¥¢¡¼¥¯¥¦¥§¥Ö" />
   <input type="hidden" id="name" name="name" value="¿ÊÃÏ" />

¤³¤³¤Ç¤Ïñ½ã¤Ë³ÆÃͤò³ÊǼ¤¹¤ë¥»¥ë¤ÈÃͤòÊÝ»ý¤·¤Æ¤¤¤ëhidden¥¿¥°¤òÆÃÄꤹ¤ë¤¿¤á¤ÎID¤ò¤Õ¤Ã¤Æ¤¤¤Þ¤¹¡£

¼¡¤Ë¡¢¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼¤Ë¤è¤Ã¤Æ¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤ËÊѹ¹¡¢¥Õ¥©¡¼¥«¥¹¤¬Â¾¤ËÁ«°Ü¤¹¤ë»þ¤Ëɽ¼¨ÃͤÈhiddenÃͤÎÊѹ¹¤ò¹Ô¤¦¥¯¥é¥¹(EditableValue?)¤òÄêµÁ¤·¤Þ¤¹¡£

<script type="text/javascript">
var EditableValue = Class.create();

EditableValue.prototype = {
  initialize: function(target_id) {
    this.text = $(target_id);
    this.input = document.createElement('input');
    this.input.type = "text";
    this.text.parentNode.appendChild(this.input);
    var hidden_id = this.text.id.substr(0, this.text.id.indexOf('_'));
    this.hidden = $(hidden_id);

    Event.observe(this.text, 'mouseover', this.enableInput.bindAsEventListener(this), false);
    Event.observe(this.input, 'blur', this.disableInput.bindAsEventListener(this), false);

    Element.show(this.text);
    Element.hide(this.input);
  },
  enableInput: function() {
    this.input.value = this.text.innerHTML;
    Element.toggle(this.text, this.input);
    Field.focus(this.input);
  },
  disableInput: function() {
    this.text.innerHTML = this.input.value;
    this.hidden.value = this.input.value;
    Element.toggle(this.text, this.input);
  },
};
</script>

initialize¡¢enableInput¡¢disableInput¤Ë¤Ï¤½¤ì¤¾¤ì¡¢EditableValue?¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¡¢¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼»þ¤Ëµ¯Æ°¤µ¤ì¤ë¥á¥½¥Ã¥É¡¢¥Õ¥©¡¼¥«¥¹¤¬Â¾¤ËÁ«°Ü¤¹¤ë»þ¤Ëµ¯Æ°¤µ¤ì¤ë¥á¥½¥Ã¥É¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£

initialize¤Ç¤Ï¡¢ÅϤµ¤ì¤¿¥¿¡¼¥²¥Ã¥È¤ÎID(Îã¤Ç¤Ïcompany_val¤äname_val)¤«¤éprototype.js¤Î$()¥á¥½¥Ã¥É¤ò»È¤Ã¤ÆDOM¤ÎElement¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤·¤Æ¡¢this.text¤È¤·¤Æ¥»¥Ã¥È¤·¤Þ¤¹¡£¤Þ¤¿¡¢input¥¿¥°¤ÎElement¥ª¥Ö¥¸¥§¥¯¥È¤òÄêµÁ¤·¤Æ¡¢this.text¤Î¿Æ¤Î»Ò¡Ê¤Ä¤Þ¤ê¤Ïthis.text¤Î·»Äï¡Ë¤È¤·¤Æthis.input¤È¤·¤Æ¥»¥Ã¥È¤·¤Þ¤¹¡£ÃͤòÊÝ»ý¤·¤Æ¤¤¤ëhidden¤ÎElement¥ª¥Ö¥¸¥§¥¯¥È¤Îid¤ò¥¿¡¼¥²¥Ã¥È¤ÎID¤«¤éµá¤á¤Æ(Îã¤Ç¤Ï¡¢substring¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æcompany_val¡¢name_val¤«¤é¤½¤ì¤¾¤ìcompany¡¢name¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡Ë¡¢$()¥á¥½¥Ã¥É¤ò»È¤Ã¤ÆÅö³ºhidden¥ª¥Ö¥¸¥§¥¯¥È¤òthis.hidden¤È¤·¤Æ¥»¥Ã¥È¤·¤Þ¤¹¡£

¤µ¤é¤Ë¡¢EventListener?¤òÍøÍѤ·¤Æ¡¢this.text¤ËÂФ·¤Æmouseover¥¤¥Ù¥ó¥È¤¬È¯À¸¤·¤¿¾ì¹ç¤ËenableInput¤ËÄêµÁ¤·¤¿¥á¥½¥Ã¥É¤òµ¯Æ°¤¹¤ë¤è¤¦¤Ë¡¢this.input¤ËÂФ·¤Æblur¥¤¥Ù¥ó¥È¤¬È¯À¸¤·¤¿¾ì¹ç¤ËdisableInput¤ËÄêµÁ¤·¤¿¥á¥½¥Ã¥É¤òµ¯Æ°¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤¹¡£

initialize¤Ç¤ÏºÇ¸å¤Ë¡¢this.text¤òɽ¼¨¡¢this.input¤òÈóɽ¼¨¤Ë¥»¥Ã¥È¤·¤Þ¤¹¡£

¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼¥¤¥Ù¥ó¥È¤¬this.text¤ËÂФ·¤ÆȯÀ¸¤·¤¿¾ì¹ç¡¢enableInput¤ËÄêµÁ¤·¤¿¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ç¤Ï¡¢this.input¤ÎÃͤËthis.text¤¬ÊÝ»ý¤¹¤ëÃ͡ʡḽºßɽ¼¨¤·¤Æ¤¤¤ëÃ͡ˤò¥»¥Ã¥È¤·¡¢this.input¤òɽ¼¨¡¢this.text¤òÈóɽ¼¨¤ËÀÚ¤êÂؤ¨¤Æ¤¤¤Þ¤¹¡£

¥Õ¥©¡¼¥«¥¹¤¬this.input¤«¤é³°¤ì¤¿¾ì¹ç¡¢disableInput¤ËÄêµÁ¤·¤¿¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ç¤Ï¡¢this.input¤ÎÃͤòthis.text¤¬ÊÝ»ý¤¹¤ëÃͤÈthis.hidden¤ÎÃͤ˥»¥Ã¥È¤·¡¢this.input¤òÈóɽ¼¨¡¢this.text¤òɽ¼¨¤ËÀÚ¤êÂؤ¨¤Æ¤¤¤Þ¤¹¡£

ºÇ¸å¤Ë¡¢¤³¤ÎEditableValue?¥¯¥é¥¹¤Ë¤½¤ì¤¾¤ì¤Î¥¿¡¼¥²¥Ã¥ÈID¤òÅϤ·¤Ænew¤·¤Þ¤¹¡£

<script type="text/javascript">
 new EditableValue('company_val');
 new EditableValue('name_val');
</script>

°Ê¾å¤Ç¡¢¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼¤Ë¤è¤Ã¤ÆÅö³ºÃͤ¬ÊÔ½¸²Äǽ¤Ë¤Ê¤ê¡¢¥Õ¥©¡¼¥«¥¹¥¢¥¦¥È¤Ë¤è¤Ã¤ÆÊÔ½¸¤·¤¿Ãͤˤè¤Ã¤Æɽ¼¨¡¢¤ª¤è¤Óhidden¤Ë¥»¥Ã¥È¤µ¤ì¤¿Ãͤ¬Êѹ¹¤µ¤ì¤Þ¤¹¡£JavaScript¤ò²¾¤ËOff¤Ë¤·¤¿¥¯¥é¥¤¥¢¥ó¥È¤Ç¤¢¤Ã¤Æ¤â¡¢Ã±¤Ë¤³¤Î¥Þ¥¦¥¹¥ª¡¼¥Ð¡¼¤Ë¤è¤ëÊÔ½¸¤¬»È¤¨¤Ê¤¯¤Ê¤ë¤À¤±¤Ç½¾Íè¤ÎÆ°¤­¤ÏÊݾ㤵¤ì¤Þ¤¹¡Ê¡á¥Ç¥°¥ì¡¼¥É²Äǽ¤ÊAjax¡Ë¡£

º£²ó¤ÎÎã¤Î¤è¤¦¤Ë¥¯¥é¥¹¤ÈEventListener?¤ò»È¤¦¤È¡¢²¼µ­¤Î¤è¤¦¤Ë¥¿¡¼¥²¥Ã¥È¤Î¥¿¥°¤ËÂФ·¤Æ¥¤¥Ù¥ó¥È¤òµ­½Ò¤·¤Ê¤¯¤Æ¤âñ¤Ëid¤ò¿¶¤ë¤À¤±¤Ç¥³¥ó¥È¥í¡¼¥ë²Äǽ¤Ë¤Ê¤ë¤¿¤á¡¢HTML¤Ï±ø¤ì¤º¡¢¥¤¥Ù¥ó¥È¤Ë¤è¤ëÁ«°Ü¤â¥¯¥é¥¹Æâ¤Ç½¸Ãæ´ÉÍý¤Ç¤­¤Æ¹½ÃÛ¤¬¤È¤Æ¤â³Ú¤Ë¤Ê¤ê¤Þ¤¹¡£

   <tr>
       <td>²ñ¼Ò̾</td><td id="company_val" onmouseover="hoge(this)">¥¢¡¼¥¯¥¦¥§¥Ö</td>
   </tr>
   <tr>
       <td>¤ªÌ¾Á°</td><td id="name_val" onmouseover="hoge(this)">¿ÊÃÏ</td>
   </tr>
[edit]

»²¹Í

[edit]

Êä­

mouseover¤Èblur¤ÎÁȤ߹ç¤ï¤»¤À¤È¡¢FireFox?¤Ç¤Ï(¤ª¤è¤ÓGecko-engine¤Î¥Ö¥é¥¦¥¶¤Ç¤Ï¡Ë

Permission denied to set property XULElement.selectedIndex
NS_ERROR_XPC_JS_THREW_STRING

¤È¤¤¤¦Exception¤¬È¯À¸¤·¤Þ¤¹¡£

http://groups.google.ca/group/netscape.public.mozilla.dom/browse_thread/thread/821271ca11a1bdbf/46c87b49c026246f?lnk=st&q=+focus+nsIAutoCompletePopup+selectedIndex&rnum=1
http://www.macridesweb.com/oltest/FocusProblems.html

ÂбþÊýË¡¤È¤·¤Æ¤Ï¡¢form¥¿¥°¤ËÂФ·¤Æ¡¢autocomplete="off"¤ò»ØÄꤷ¤Þ¤¹¡£
º£²ó¤ÎÎã¤Ç¤Ï

<form method="post" action="" autocomplete="off">

¤È¤·¤Þ¤¹¡£

Åê¹Æ¼Ô¿ÊÃÏ | ¥Ñ¡¼¥Þ¥ê¥ó¥¯?

| append.gif

tag: PukiWiki?, Ajax?, prototype.js?


¥È¥Ã¥×   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS

¥¢¡¼¥¯¥¦¥§¥Ö¤Î¥µ¡¼¥Ó¥¹¤ä¥½¥ê¥å¡¼¥·¥ç¥ó¤Ï¤³¤Á¤é