0

「SELECT メニュー」を DIV に「prependTo」しようとしています。メニューは、DIV 上の 'mouseover' で 'prependingTo' です。このメニューには、いくつかのオプションを含む SELECT があります。しかし、他のオプションを選択したい場合、SELECTメニューのオプションが隠れています。それは動作しません。なんで ?

HTML:

 <div id="add" style='width:200px; background:cyan;'> + + + + + + + + + </div>
 <div id="menu">
     <div style="display:inline-block;">
         <button>1</button>
         <button>2</button>
     </div>
     <div style="display:inline-block;">
         <select id="fs">
            <option value="Arial">Arial</option>
            <option value="Verdana ">Verdana </option>
            <option value="Impact ">Impact </option>
            <option value="Comic Sans MS">Comic Sans MS</option>
         </select>
     </div>

 </div>
 <br>
 <div id="cont">
    <div id="container">
       <div id="divA">1111<br><br>&nbsp;</div>
       <br>
       <div id="divB">2222<br><br>&nbsp;</div>
       <br>
       <div id="divC">33333<br><br>&nbsp;</div>
       <br>
       <div id="divD"><br>&nbsp;</div>
    </div>
 </div>

CSS:

  #container{ padding: 100px;  }
  #menu{  font-size: 10px;  
       position: absolute;
       background-color: none;
       letter-spacing: 0px;
  }
  #divA{ background-color: yellow; }
  #divB{ background-color: red;  }
  .divB{ background-color: red; }
  #divC{ background-color: cyan; }
  #divD{ background-color: brown; }

jQuery:

  $("#add").live("click", function() {
     var timestamp = Date.now();
     $("#container").prepend('<div class="divB" id="'+timestamp+'">'+timestamp+'<br><br></div>');
  });
  $("#container div").live({
     mouseover: function() {
        if( $(this).closest("#menu").length ){ return; }
        $('#menu').prependTo($(this));
     }
  });
4

2 に答える 2

1

findの代わりにメソッドを使用できます。要素の最も近い親closestclosest選択し、要素の子孫を見つけたい場合、if ステートメントは常に を返します。また、非推奨でfalseあることにも注意してください。代わりにlive使用できます。on

$(document).on({
        mouseover: function(e) {
            if( $(this).find("#menu").length ){ return; }
            // or if ( $('#menu', this).length ){ return; }
            $('#menu').prependTo($(this));

        }
}, "#container div");

http://jsfiddle.net/h7y3Z/

于 2012-09-24T10:00:35.207 に答える
1

このようにしてみてください

$("#container").bind({
    mouseover: function() {
        if( $(this).closest("#menu").length ){ 
            return; 
        }
        $('#menu').prependTo(this);
        $("#container").unbind('mouseover');       
    }
});
于 2012-09-24T10:12:19.190 に答える