JS或JQUERY中事件的一个问题。

三爷_ 2011-07-04 11:19:58
我现在有这样一个需求:

我有一个表情框(FaceDlg),有两个多行文本框(ATextArea,BTextArea),以及两个用来显示表情框的按钮(AButton,BButton),并且上述这些东西处于同一个页面。
我现在要做的功能是:我想实现用这一个表情框,实现向不同的文本框插入表情符号。
例如:
AButton点击:弹出表情框(FaceDlg show),然后当我点击FaceDlg中的某个表情时将该表情对应的表情符号插入ATextArea。
BButton点击:弹出表情框(FaceDlg show),然后点击FaceDlg中的某个表情时将该表情对应的表情符号插入BTextArea。

我实现的方法是:每次弹出表情框的时候,我都绑定一下事件(该事件的作用是,根据传进来的文本框ID,来区分向哪个文本框插入表情符号)。

我现在遇到的问题是:这个事件无论我绑定多少次,好像都是以最后一次绑定的对象为准,因为我先绑定ATextArea,然后绑定BTextArea,最后无论是点击AButton,还是BButton都是将表情符号插入BTextArea。

我对JS和JQuery都只了解皮毛,不知道这个是不是他们的事件机制问题,如果是,我如何解决这个问题呢?
如果不是,那么应该用哪种方法来实现这个功能呢?


我不想用两个表情框来实现,每个文本框来对应一个表情框。
...全文
258 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsw645645645 2011-07-04
  • 打赏
  • 举报
回复
你的关键的插入方法,给看看嘛
三爷_ 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dongpy1111 的回复:]

这样应该没有问题才对啊,两个BUTTON向这个地方放的是不同的东西,难道放之前要清空?
[/Quote]

因为这两个BUTTON只有在第一次被点击的时候才像里面放东西,因为BButton是第二次点击,所以,隐藏域里面一直都是放的BButton点击是设置的值,以后A,B button点击的时候都都不会在改变那个值了。

不知道什么什么原因。。。。。。,很无语啊,从来没遇到过这种问题。
乌漆嘛黑的夜 2011-07-04
  • 打赏
  • 举报
回复
这样应该没有问题才对啊,两个BUTTON向这个地方放的是不同的东西,难道放之前要清空?
三爷_ 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dongpy1111 的回复:]

你要不试试在页面中放一个隐藏的input, display:none。
然后BUTTON的事件就是往这里面写东西,
然后你的表情的东西插入时就在这里面去取
[/Quote]

我上面列出的第三个方法,就是你所说的这样,是无效的。
三爷_ 2011-07-04
  • 打赏
  • 举报
回复
当AButton点击的时候,我调用这个方法,是这样传参:
fnLoadFaceItems("#ATextArea",faceClassID);

当BButton点击的时候,是这样:
fnLoadFaceItems("#BTextArea",faceClassID);

当第一次点击AButton时,表情直接插入ATextArea了,正常;如果一直不点击BButton,则一直正常。
当第一次点击BButton是,表情直接插入了BTextArea了,正常。

此后无论点击AButton还是BButton,表情都插入BTextArea。

当然以上顺序可以相反,但结果一致(一直插入BTextArea,或一直插入ATextArea)。


我想这是不是JS或JQuery的事件机制的问题?
三爷_ 2011-07-04
  • 打赏
  • 举报
回复

绑定事件:

/*************************************
*描述:根据表情分类,加载该分类的表情列表
*@selecter:当某个表情被点击时,该表情的alt属性值将写入的文本框(多行)的JQuery选择器。
*@classId:该表情分类的id
/************************************/
function fnLoadFaceItems(selecter,classId) {
$.post("/Home/GetFaces.jzking/" + classId, function(result) {
$("#FaceContent").replaceWith(result);
$(".imgFace").unbind("click");//imgFace是,单个表情的class
$(".imgFace").click(function() {
$(selecter).setCaret();
$(selecter).insertAtCaret($(this).attr("alt"));
$(".FaceBoxLayer").hide();
});
});
}



调用:

fnLoadFaceItems("#MainTxtBox",this.id);//此方法位于faceDlg.js中
bustersword 2011-07-04
  • 打赏
  • 举报
回复
onclick="click(this);"
这样传,不行么?
lsw645645645 2011-07-04
  • 打赏
  • 举报
回复
头晕
把代码贴出了
乌漆嘛黑的夜 2011-07-04
  • 打赏
  • 举报
回复
你要不试试在页面中放一个隐藏的input, display:none。
然后BUTTON的事件就是往这里面写东西,
然后你的表情的东西插入时就在这里面去取
三爷_ 2011-07-04
  • 打赏
  • 举报
回复
我试过这些方法:
1、在两个Button的点击事件中,传入对应文本框的ID,此方法无效,原因如上楼。
2、设置全局变量,无效。
3、放置一个隐藏域,其值为当前接受表情的文本框的ID,此方法无效,只有第一次绑定事件的时候才会去获取它的值,以后每次点击都是绑定第二个Button事件时或去的值。
三爷_ 2011-07-04
  • 打赏
  • 举报
回复
楼上两位,这样不行啊,

主要问题也是这里,事件绑定好像只执行了一次,

也就是说当我第一次点击AButton的时候,改变了全局变量的值, 假设此时全局变量的值为A
当我第一次点击BButton的时候,又改变了全局变量的值,假设此时全局变量的值为B。

但是,当我再次点击AButton的时候,全局变量的值却依然是B,继续点击下去,无论是点击AButton还是BButton全局变量的值永远是B。

楼上两位所说的方法我都试过,就是因为上面这个原因,都无法走通。
vermilion3618 2011-07-04
  • 打赏
  • 举报
回复
这样```定义一个全局变量``var nowtxt;
当点击AButton时` 在click事件中加一行nowtxt=0;
当点击BButton时` 在click事件中加一行nowtxt=1;


然后在点击FaceDlg中的某个表情时判断nowtxt为0还是为1

如果为0 就给ATextArea加表情
如果为1 就给BTextArea加表情

变量随便你定义`` 也可以是bool值``这应该很简单``只要是全局变量就行了``
就是写在所有事件外面的变量
lsw645645645 2011-07-04
  • 打赏
  • 举报
回复
你绑定的事件代码是什么样的呀?
直接调用个自定义的方法,然后传入不同的ID,来进行判断不行么?
三爷_ 2011-07-04
  • 打赏
  • 举报
回复
没人给点建议吗

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧