当用户将文本拖动到文本字段时,如何触发JavaScript事件
How to fire JavaScript event when user drags text into textfield?
我有一个表单,可以格式化由多个文本字段输入的文本,我希望用户可以键入文本、粘贴文本并将文本放入文本字段。JavaScript事件为format()
当用户键入文本和粘贴文本时,我使用了onkeyup="format()
,但我不知道什么事件会允许用户选择文本,将其拖放到文本字段上,并触发该事件以自动更新格式化的文本。我试过ondrop
、onmouseup
和onchange
,但都没有用
我有一种感觉,onmouseup
属性正在工作,但问题是,在鼠标释放后,在文本文本字段包含新用户文本之前,事件立即启动,所以看起来好像没有启动,而实际上启动了,但文本字段中什么都没有。这可能是吗?如果是,我可以使用setTimeout
将事件延迟500毫秒(或其他时间(,直到文本出现
这是javscript:
<script language="JavaScript">
function format() {
var author = document.form.author.value;
var credentials = document.form.credentials.value;
var date = document.form.date.value;
var publication = document.form.publication.value;
var title = document.form.title.value;
var evidence = document.form.evidence.value;
var tagline = document.form.tagline.value;
document.getElementById('txtarea').innerHTML = ("<b>" + tagline + "</b>" + "</br >" + "<br />" + "<i>" + "<u>" + author + " " + date + "." + "</u> " + author + " (" + credentials + ") " + date + " " + publication + " " + title + " " + (window.top.getBrowser().selectedBrowser.contentWindow.location.href) + "</i>" + "<br />" + "<br />" + evidence);}
function clearForm() {
document.getElementById('txtarea').innerHTML = "";
}
</script>
这是我拥有的7个文本字段之一(我有onkeyup
,它涵盖了类型和粘贴,但我不知道该使用什么进行拖放(:
<form class="right_aligned" name="form" method="get" action="" id="form" onkeyup="format()" onmouseup="format()" ondrop="format()">
<div style="float: left;"><input ondblclick="this.value=''" type="text" name="publication" value="Publication..." id="publication" style="border:1px solid;border-color:#B0B0B0;width:225px;padding:4px;margin:10px;color: #000;"
ondrop="format()" ondragover="{this.value=''; this.style.color='#000';}" onfocus="if (this.value==this.defaultValue) {this.value=''; this.style.color='#000';}" onblur="if(this.value=='') {this.value=this.defaultValue; this.style.color='#000';}"></div>
这里是文本输出到的contenteditable
div:
<div CONTENTEDITABLE id="txtarea" ondblclick="document.execCommand('selectAll',false,null);" style="float:left;overflow:auto;padding:5px;background-color:#FFF;border:1px solid;border-color:#B0B0B0;outline:none;width:213px;height:260px;font-size:.75em;margin-left:10px;margin-right:10px;margin-bottom:10px;margin-top:5px" type="text"></div>
顺便说一句,这是针对Firefox扩展的,所以跨浏览器不是问题。它只需要在Firefox中工作即可。
可能还有另一种方法,但您可以在1毫秒的时间内使用setTimeout
,它似乎工作得很好:
<p>Duis nunc nisl, luctus nec auctor id, iaculis eu nibh. Nunc odio velit, pretium et scelerisque eget, auctor eget erat. Cras id nulla nec odio vestibulum egestas ac in mi. Vivamus mollis suscipit condimentum. Sed laoreet eros ut lorem tempor porttitor. Etiam eget erat at lacus facilisis aliquam eget id purus.</p>
<br/>
<textarea ondrop="formatOnDrop(this)" onchange="formatOnChange(this)" id="textarea"></textarea>
<br/>
<input type="text" id="inputtext" ondrop="formatOnDrop(this)" onchange="formatOnChange(this)"/>
function formatOnDrop(el){
formatElement = el;
//alert('ondrop: ' + el.id + ' was changed to ' + el.value);
setTimeout(function(){format()},1);
}
function formatOnChange(el){
formatElement = el;
//alert('onchange: ' + el.id + ' was changed to ' + el.value);
setTimeout(function(){format()},1);
}
function format() {
alert('format: ' + formatElement.id + ' was changed to ' + formatElement.value);
}
http://jsfiddle.net/rREsh/3/
请注意,formatOnChange()
函数在选择和删除文本时从不调用,但在复制和粘贴时会激发onblur
。
相关文章:
- 触发功能时做机场插件文本效果
- 在 AngularJs 中触发文本框的复选框
- jQuery:在整个文档上触发按键功能,但不在输入和文本区域内
- 角度文本输入提交无法触发控制台日志
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- 触发数字键盘输入文本所有移动设备
- 在文本区域中的Keyup事件上触发Twitter Bootstrap Popover
- 在聚焦文本输入时触发文件选择
- 按键事件在文本输入失去焦点并再次获得焦点后自动触发
- 以编程方式触发空格键单击文本区域
- 在文本输入中按 Enter 键时触发<按钮>
- 单击文本框的右键单击上下文菜单的“删除”后触发的事件
- 按钮始终在文本框中按回车键时触发
- 每当在文本区域上输入按钮时,都会触发按钮
- 如何在下面的代码中使用 jquery 获取由单选按钮触发的文本框的值
- 在 IE11 中,不会为文本框触发指针移动事件
- jQuery .click() 在选择/突出显示文本时触发
- Jquery点击事件交换文本不触发第一次点击,但工作后
- 如何仅在输入框中输入文本但未删除文本时触发事件
- 没有为sweetalert2文本框触发jQuery on()事件