我现在有这样一个需求:我有一个表情框(FaceDlg),有两个多行文本框(ATextArea,BTextArea),以及两个用来显示表情框的按钮(AButton,BButton),并且上述这些东西处于同一个页面。
我现在要做的功能是:我想实现用这一个表情框,实现向不同的文本框插入表情符号。
例如:
AButton点击:弹出表情框(FaceDlg show),然后当我点击FaceDlg中的某个表情时将该表情对应的表情符号插入ATextArea。
BButton点击:弹出表情框(FaceDlg show),然后点击FaceDlg中的某个表情时将该表情对应的表情符号插入BTextArea。我实现的方法是:每次弹出表情框的时候,我都绑定一下事件(该事件的作用是,根据传进来的文本框ID,来区分向哪个文本框插入表情符号)。我现在遇到的问题是:这个事件无论我绑定多少次,好像都是以最后一次绑定的对象为准,因为我先绑定ATextArea,然后绑定BTextArea,最后无论是点击AButton,还是BButton都是将表情符号插入BTextArea。我对JS和JQuery都只了解皮毛,不知道这个是不是他们的事件机制问题,如果是,我如何解决这个问题呢?
如果不是,那么应该用哪种方法来实现这个功能呢?
我不想用两个表情框来实现,每个文本框来对应一个表情框。

解决方案 »

  1.   

    这样```定义一个全局变量``var nowtxt;
    当点击AButton时` 在click事件中加一行nowtxt=0;
    当点击BButton时` 在click事件中加一行nowtxt=1;
    然后在点击FaceDlg中的某个表情时判断nowtxt为0还是为1 如果为0 就给ATextArea加表情
    如果为1 就给BTextArea加表情变量随便你定义`` 也可以是bool值``这应该很简单``只要是全局变量就行了``
    就是写在所有事件外面的变量
      

  2.   

    楼上两位,这样不行啊,主要问题也是这里,事件绑定好像只执行了一次,也就是说当我第一次点击AButton的时候,改变了全局变量的值, 假设此时全局变量的值为A
    当我第一次点击BButton的时候,又改变了全局变量的值,假设此时全局变量的值为B。但是,当我再次点击AButton的时候,全局变量的值却依然是B,继续点击下去,无论是点击AButton还是BButton全局变量的值永远是B。楼上两位所说的方法我都试过,就是因为上面这个原因,都无法走通。
      

  3.   

    我试过这些方法:
    1、在两个Button的点击事件中,传入对应文本框的ID,此方法无效,原因如上楼。
    2、设置全局变量,无效。
    3、放置一个隐藏域,其值为当前接受表情的文本框的ID,此方法无效,只有第一次绑定事件的时候才会去获取它的值,以后每次点击都是绑定第二个Button事件时或去的值。
      

  4.   

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

  5.   

    onclick="click(this);"
    这样传,不行么?
      

  6.   


    绑定事件:/*************************************
     *描述:根据表情分类,加载该分类的表情列表
     *@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中
      

  7.   

    当AButton点击的时候,我调用这个方法,是这样传参:
    fnLoadFaceItems("#ATextArea",faceClassID);当BButton点击的时候,是这样:
    fnLoadFaceItems("#BTextArea",faceClassID);当第一次点击AButton时,表情直接插入ATextArea了,正常;如果一直不点击BButton,则一直正常。
    当第一次点击BButton是,表情直接插入了BTextArea了,正常。此后无论点击AButton还是BButton,表情都插入BTextArea。当然以上顺序可以相反,但结果一致(一直插入BTextArea,或一直插入ATextArea)。
    我想这是不是JS或JQuery的事件机制的问题?
      

  8.   

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

  9.   


    因为这两个BUTTON只有在第一次被点击的时候才像里面放东西,因为BButton是第二次点击,所以,隐藏域里面一直都是放的BButton点击是设置的值,以后A,B button点击的时候都都不会在改变那个值了。不知道什么什么原因,很无语啊,从来没遇到过这种问题。