<head>
<script type="text/javascript">
(function ($) {
$.fn.extend({
insertAtCaret: function (myValue) {
this.focus();
sel = document.selection.createRange().text+=myValue;
this.focus();
})
})(jQuery);
//jQuery扩展方法:向指定文本框插入字符,光标处插入
//$("#to_email").insertAtCaret(";"); var InsertPress = function(){}; InsertPress.Prototype={
//初始化,绑定事件
Initialize:function (inputButton,tarTextBox, imgContainer,) {
$(imgContainer+" img").each(function(){
$(this).click(function(){
$(tarTextBox).insertAtCart($(this).attr("alt"));
});
});
$(inputButton).click(function(){
$(imgContainer).show();
});
},
//将文本替换回图片
ConvertBack:function(outputDiv){
$(outputDiv).replace(/Rex.../,"...");
}
}
</script>
<script type="text/javascript">
$(document).ready(
function () {
var press=new InsertPress();
InsertPress.Initialize("#inputButton","#TargetTxt","#imgContainer");
InsertPress.ConvertBack("#OutputDiv");
});
</script>
</head><body>
<div id="OutputDiv">
<p>
[表[表情5][表情7][表情
</p>
</div>
<div id="InputDiv">
<textarea id="TargetTxt" rows="5" cols="5"></textarea>
<div id="inputButton"></div>
<div id="imgContainer">
<img alt="ABC" src="../imgFolder/ABC.gif"/>
<img alt="ABC" src="../imgFolder/ABC.gif"/>
<img alt="ABC" src="../imgFolder/ABC.gif"/>
<img alt="ABC" src="../imgFolder/ABC.gif"/>
<img alt="ABC" src="../imgFolder/ABC.gif"/>
<img alt="ABC" src="../imgFolder/ABC.gif"/>
</div>
<input type="button" id="TargetBtn" value="提交" />
</div>
</body>
因为我在公司,所以真实源码手上没有,只是随手在notepad里写了一个,可能run不了。(只考虑IE浏览器的效果,FF上已经没问题了)
现在问题就在于:
我怎么才能点击一个img之后,自动关闭这个imgContainer?(不仅如此,点击页面任何区域,这个imgContainer也需要关闭)
我试过两种方法:
1.inputButton添加blur事件,但是这样会造成img的click事件还未触发就先触发了inputButton的blur事件。
2.$(document)添加click事件,但这会造成一个莫名其妙的问题,插入到文本框中的字符始终都插入到开始的地方,并不是在光标处插入。(只有IE浏览器会出现这个问题。另外据我观察,产生这个问题时,文本框中的光标始终闪动很快,是否是这里出问题了?)
不仅如此,点击页面任何区域,这个imgContainer也需要关闭。既然有你说的那个灵异效果,就不用那个方法。换个思路,给imgContainer加上onmouseout事件,鼠标移出就关闭,比没事硬去点击其它地方还省事。
另外,对于我的问题2,错误可能并不在InsertPress函数里,那个光标处插入的jQuery扩展方法也许有bug。
其实我是帮同学做的一个asp.net UserControl,还有很多东西没有完善,等做到拿出来不丢人了,一定分享。
最终我还是使用了JQ的hover方法来实现的,谢谢了~