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

jquery+jeditable,双击另一个可编辑区域时,输入字段不会模糊

  •  1
  • Gazillion  · 技术社区  · 16 年前

    我正在创建一个小页面,在这个页面中,用户可以在jeditable/jquery的帮助下修改类别和项目的名称。

    该脚本可以正常工作,但在Firefox中的行为有点奇怪。如果我双击我的可编辑范围,它将替换为输入字段。然后,如果我将注意力集中在除另一个可编辑范围之外的其他元素上,它将消失。我还应该注意,光标第一次进入输入框时就消失了。

    它在IE中运行良好。

    以下是我的jquery定义:

    $(document).ready(function(){
        //this will be executed once the dom is loaded
    
        $(".categories").sortable({
                                                        connectWith: ".categories",
                                                        dropOnEmpty: true,
                                                        tolerance: "pointer",
                                                        cancel: ".sections"
                                                        }).disableSelection();
    
        $(".sections").sortable({
                                                        connectWith: ".sections",
                                                        items: "li:not(.empty)",
                                                        dropOnEmpty: true
                                                        }).disableSelection();                              
    
        $(".section_edit").editable("serve_edit_section_request.php", { 
          tooltip: "Click to edit...",
          select: true,
          style: "inherit",
          cssclass: "edit_input_box",
          event: "dblclick",
          id: this.id,
          name: "section_name",
          onblur: "cancel"  
      })
    
      $(".category_edit").editable("serve_edit_category_request.php", { 
          tooltip: "Click to edit...",
          select: true,
          style: "inherit",
          cssclass: "edit_input_box",
          event: "dblclick",
          id: this.id,
          name: "category_name",
          onblur: "cancel"  
      })
    
    });
    

    <ul class='categories'>
      <li id='1' class='category'><span id='edit_1' class='category_edit'>Category 1</span>
        <ul id='cat_1' class='sections'>    
          <li class='empty'></li>   
          <li id='20' class='section'><span id='edit_20' class='section_edit'>My Section 1</span></li>
        </ul>
      </li>
      <li id='2' class='category'><span id='edit_2' class='category_edit'>Category 2</span>
        <ul id='cat_2' class='sections'>    
          <li class='empty'></li>   
          <li id='21' class='section'><span id='edit_21' class='section_edit'>My Section 2</span></li>  
          <li id='22' class='section'><span id='edit_22' class='section_edit'>My Section 3</span></li>
        </ul>
      </li>
      <li id='3' class='category'><span id='edit_3' class='category_edit'>Category 3</span>
        <ul id='cat_3' class='sections'>    
          <li class='empty'></li>   
          <li id='23' class='section'><span id='edit_23' class='section_edit'>My Section 4</span></li>
        </ul>
      </li>
      <li id='4' class='category'><span id='edit_4' class='category_edit'>Category 4</span>
        <ul id='cat_4' class='sections'>    
          <li class='empty'></li>   
          <li id='809' class='section'><span id='edit_809' class='section_edit'>My Section 5</span></li>
        </ul>
      </li>
    </ul>
    

    (请原谅jquery内容的糟糕标签,我不明白为什么它会偶尔出现)

    谢谢你的帮助!:)

    1 回复  |  直到 16 年前
        1
  •  1
  •   Tiffany Conroy    16 年前

    我也有同样的问题:

    该问题是由disableSelection()引起的。sortable()的常用用法不会使用textareas,因此大多数人不会发现以下微妙之处:

    disableSelection()在FireFox中使用CSS特性,因此所有的效果都会在您应用disableSelection()的所有子代中感受到。因为您只想影响直接子级(就像sortable()只作用于直接子级一样),所以应该这样做:

    $(".categories").sortable({
        connectWith: ".categories",
        dropOnEmpty: true,
        tolerance: "pointer",
        cancel: ".sections"
    });
    $(".categories > *").disableSelection();
    

    或

    $(".categories").sortable({
        connectWith: ".categories",
        dropOnEmpty: true,
        tolerance: "pointer",
        cancel: ".sections"
    }).children().disableSelection();