代码之家  ›  专栏  ›  技术社区  ›  adardesign

live(“click”,fn)仅在第二次单击时起作用

  •  0
  • adardesign  · 技术社区  · 16 年前

    $(generatedEl).live("click", fn...) (有别的办法吗?)

    以下是我正在使用的代码:

    $(".toggleView").live("click", function(){
                        if(isTrunced){
                            $(this).html(cntarctText).siblings("h3").html(currEl.data("md").myFullText)
                            isTrunced = false
                        }
                        else{
                            $(this).html(expandText).siblings("h3").html(currEl.data("md").truncedText)
                            isTrunced = true
                            }       
                         });
    

    (这是在一个 .each() )

    有人能帮我找到这个奇怪的虫子吗,

    编辑:添加了整个代码块。

        var truncMe = function(passedNode, passedChanges){
            var truncTarget = passedNode,
                expandText = "more",
                cntarctText = "less",
                isTooLong = false,
                isTrunced = false,
                maxChar = 170,
                toggleView
    
    
                truncTarget.each(function (index, domEle) {
                var currEl = $(domEle)
    
    
                currEl.data("md", {myFullText:currEl.html(),isTooLong:false, isTrunced:false })
                    if(currEl.data("md").myFullText.length >= maxChar){
                        currEl.data("md").truncedText = currEl.data("md").myFullText.substring(0, maxChar);
                        currEl.data("md").isTooLong = true;
                        currEl.siblings(".toggleView").remove()
                        if(passedChanges){
                            currEl.data("md").myFullText = passedChanges;
                            currEl.data("md").truncedText = currEl.data("md").myFullText.substring(0, maxChar);
                        }
              /* here the element is created */
                        toggleView = $("<div class='toggleView'/>").html(expandText).appendTo(currEl.parent()); 
                        currEl.html(currEl.data("md").truncedText)
              /* here the event is binded */                        
    $(".toggleView").live("click", function(){
    
                        if(isTrunced){
                            $(this).html(cntarctText).siblings("h3").html(currEl.data("md").myFullText)
                            isTrunced = false
                        }
                        else{
                            $(this).html(expandText).siblings("h3").html(currEl.data("md").truncedText)
                            isTrunced = true
                            }       
                         });        
                    }
                    else{
                        currEl.siblings(".toggleView").remove()
    
                        }
                 });                                                        
    
            }
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Ariel    16 年前

    关于 .live() 它不需要被多次调用。你所要做的就是把它拿出来 .each()

    由于使用类作为选择器,因此将使用该类创建的任何元素都将自动绑定到click事件。

        2
  •  1
  •   Mottie    16 年前

    似乎需要从数据中提取变量“isTrunced”。由于它不是初始定义的(在live函数中),它将默认为false。

    所以,一旦您将活动函数从每个循环中拉出,请尝试以下操作:

    $(".toggleView").live("click", function(){
     if($(this).data("isTrunced")){
      $(this).html(cntarctText).siblings("h3").html(currEl.data("md").myFullText)
      $(this).data("isTrunced", "false");
     } else {
      $(this).html(expandText).siblings("h3").html(currEl.data("md").truncedText)
      $(this).data("isTrunced", "true");
     }
    });
    
        3
  •  0
  •   Community Mohan Dere    9 年前

    if的逻辑是错误的。

    这是正确的:

    if(isTrunced){
      $(this).html(cntarctText).siblings("h3").html(currEl.data("md").myFullText)
      isTrunced = false
        }
    else{
     $(this).html(expandText).siblings("h3").html(currEl.data("md").truncedText)
       isTrunced = true
      }       
    

    Ariel ,说得好。

    推荐文章