让æä»¬ä»ç»ä¸ä¸ä¼´éæ°æ®æ´æ°çåç§äºä»¶ã
äºä»¶ï¼change
å½å
ç´ æ´æ¹å®ææ¶ï¼å°è§¦å change äºä»¶ã
å¯¹äºææ¬è¾å
¥æ¡ï¼å½å
¶å¤±å»ç¦ç¹æ¶ï¼å°±ä¼è§¦å change äºä»¶ã
ä¾å¦ï¼å½æä»¬å¨ä¸é¢çææ¬åæ®µä¸é®å
¥å
å®¹æ¶ ââ ä¸ä¼è§¦å change äºä»¶ã使¯ï¼å½æä»¬å°ç¦ç¹ç§»å°å
¶ä»ä½ç½®æ¶ï¼ä¾å¦ï¼ç¹å»æé® ââ å°±ä¼è§¦å change äºä»¶ï¼
<input type="text" onchange="alert(this.value)">
<input type="button" value="Button">
对äºå
¶å®å
ç´ ï¼selectï¼input type=checkbox/radioï¼ä¼å¨éé¡¹æ´æ¹åç«å³è§¦å change äºä»¶ã
<select onchange="alert(this.value)">
<option value="">Select something</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
äºä»¶ï¼input
æ¯å½ç¨æ·å¯¹è¾å
¥å¼è¿è¡ä¿®æ¹åï¼å°±ä¼è§¦å input äºä»¶ã
ä¸é®çäºä»¶ä¸åï¼åªè¦å¼æ¹åäºï¼input äºä»¶å°±ä¼è§¦åï¼å³ä½¿é£äºä¸æ¶åé®çè¡ä¸ºï¼actionï¼çå¼çæ´æ¹ä¹æ¯å¦æ¤ï¼ä½¿ç¨é¼ æ ç²è´´ï¼æè
使ç¨è¯é³è¯å«æ¥è¾å
¥ææ¬ã
ä¾å¦ï¼
<input type="text" id="input"> oninput: <span id="result"></span>
<script>
input.oninput = function() {
result.innerHTML = input.value;
};
</script>
妿æä»¬æ³è¦å¤ç对 <input> çæ¯æ¬¡æ´æ¹ï¼é£ä¹æ¤äºä»¶æ¯æä½³éæ©ã
å¦ä¸æ¹é¢ï¼input äºä»¶ä¸ä¼å¨é£äºä¸æ¶å弿´æ¹çé®çè¾å
¥æå
¶ä»è¡ä¸ºä¸è§¦åï¼ä¾å¦å¨è¾å
¥æ¶ææ¹åé® â¦ â¨ã
oninput ä¸çä»»ä½äºä»¶å½è¾å
¥å¼æ´æ¹åï¼å°±ä¼è§¦å input äºä»¶ã
æä»¥ï¼æä»¬æ æ³ä½¿ç¨ event.preventDefault() ââ å·²ç»å¤ªè¿äºï¼ä¸ä¼èµ·ä»»ä½ä½ç¨äºã
äºä»¶ï¼cutï¼copyï¼paste
è¿äºäºä»¶åçäºåªå/æ·è´/ç²è´´ä¸ä¸ªå¼çæ¶åã
å®ä»¬å±äº ClipboardEvent ç±»ï¼å¹¶æä¾äºå¯¹åªå/æ·è´/ç²è´´çæ°æ®çè®¿é®æ¹æ³ã
æä»¬ä¹å¯ä»¥ä½¿ç¨ event.preventDefault() æ¥ä¸æ¢è¡ä¸ºï¼ç¶åä»ä¹é½ä¸ä¼è¢«å¤å¶/ç²è´´ã
ä¾å¦ï¼ä¸é¢ç代ç 黿¢äºåªå/æ·è´/ç²è´´çäºä»¶ï¼å¹¶æ¾ç¤ºåºäºæä»¬æå°è¯åªå/æ·è´/ç²è´´çå 容ï¼
<input type="text" id="input">
<script>
input.onpaste = function(event) {
alert("paste: " + event.clipboardData.getData('text/plain'));
event.preventDefault();
};
input.oncut = input.oncopy = function(event) {
alert(event.type + '-' + document.getSelection());
event.preventDefault();
};
</script>
请注æï¼å¨åªå/å¤å¶äºä»¶å¤çç¨åºä¸è°ç¨ event.clipboardData.getData(...) åªä¼å¾å°ä¸ä¸ªç©ºå符串ã仿æ¯ä¸è®²ï¼è¿æ¯å ä¸ºæ¤æ¶æ°æ®è¿æªåå
¥åªåæ¿ã妿æä»¬ä½¿ç¨ event.preventDefault()ï¼å宿 ¹æ¬ä¸ä¼è¢«å¤å¶ã
æä»¥ä¸é¢çä¾åä¸ä½¿ç¨ document.getSelection() æ¥å¾å°è¢«éä¸çææ¬ãä½ å¯ä»¥å¨ éæ©ï¼Selectionï¼åèå´ï¼Rangeï¼ ä¸äºè§£æ´å¤å
³äºææ¬éæ©ï¼document selectionï¼çç»èã
æä»¬ä¸ä» å¯ä»¥å¤å¶/ç²è´´ææ¬ï¼ä¹å¯ä»¥å¤å¶/ç²è´´å ¶ä»åç§å 容ãä¾å¦ï¼æä»¬å¯ä»¥å¨æä½ç³»ç»çæä»¶ç®¡çå¨ä¸å¤å¶ä¸ä¸ªæä»¶å¹¶è¿è¡ç²è´´ã
è¿æ¯å 为 clipboardData å®ç°äº DataTransfer æ¥å£ï¼é常ç¨äºææ¾åå¤å¶/ç²è´´ãè¿è¶
åºäºæ¬ææè®¨è®ºçèå´ï¼ä½ä½ å¯ä»¥å¨ DataTransfer è§è ä¸è¿è¡è¯¦ç»äºè§£ã
å¦å¤ï¼è¿æä¸ä¸ªå¯ä»¥è®¿é®åªåæ¿ç弿¥ APIï¼navigator.clipboardï¼è¯¦è§ Clipboard API åäºä»¶è§èï¼ç«çæµè§å¨ï¼Firefoxï¼å°æªæ¯æã
å®å ¨éå¶
åªè´´æ¿æ¯âå ¨å±âæä½ç³»ç»çº§å«çä¸è¥¿ãç¨æ·å¯è½ä¼å¨åç§åºç¨ç¨åºä¹é´åæ¢ï¼å¤å¶/ç²è´´ä¸åçå 容ï¼èæµè§å¨é¡µé¢ä¸åºè¯¥è½è®¿é®è¿äºå 容ã
å æ¤ï¼å¤§å¤æ°æµè§å¨ä» å è®¸å¨æäºç¨æ·æä½èå´å ï¼ä¾å¦å¤å¶/ç²è´´çï¼å¯¹åªåæ¿è¿è¡æ ç¼ç读/å访é®ã
é¤ç«çï¼Firefoxï¼æµè§å¨å¤ï¼æææµè§å¨é½ç¦æ¢ä½¿ç¨ dispatchEvent çæâèªå®ä¹âåªè´´æ¿äºä»¶ï¼å³ä½¿æä»¬è®¾æ³è°åº¦æ¤ç±»äºä»¶ãè§èä¹æç¡®å£°æäºï¼åæï¼synteticï¼äºä»¶ä¸å¾æä¾å¯¹åªåæ¿çè®¿é®æéã
æ¤å¤ï¼å¦ææäººæ³å° event.clipboardData ä¿åå¨äºä»¶å¤çç¨åºä¸ï¼ç¶åç¨åå访é®å® ââ è¿ä¹ä¸ä¼çæã
éç³ï¼event.clipboardData ä» å¨ç¨æ·å¯å¨çäºä»¶å¤çç¨åºçä¸ä¸æä¸çæã
å¦å¤, navigator.clipboard æ¯ä¸ä¸ªè¾æ°ç APIï¼éç¨äºä»»ä½ä¸ä¸æã妿éè¦ï¼å®ä¼è¯·æ±ç¨æ·ç许å¯ã
æ»ç»
æ°æ®æ´æ¹äºä»¶:
| äºä»¶ | æè¿° | ç¹ç¹ |
|---|---|---|
change |
å¼è¢«æ¹åã | å¯¹äºææ¬è¾å ¥ï¼å½å¤±å»ç¦ç¹æ¶è§¦åã |
input |
ææ¬è¾å ¥çæ¯æ¬¡æ´æ¹ã | ç«å³è§¦åï¼ä¸ change ä¸åã |
cut/copy/paste |
åªè´´/æ·è´/ç²è´´è¡ä¸ºã | è¡ä¸ºå¯ä»¥è¢«é»æ¢ãevent.clipboardData 屿§å¯ä»¥ç¨äºè®¿é®åªè´´æ¿ãé¤äºç«çï¼Firefoxï¼ä¹å¤çæµè§å¨é½æ¯æ navigator.clipboardã |
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼