在不同ID的情况下在多个div中使用下拉列表的最佳做法
我有一个用户流,当我添加一个下拉菜单添加删除时,编辑帖子等只会在顶部帖子上打开一个div,所以我知道它必须由一个唯一的ID来完成。
也许有些javascript?
这就是我到目前为止所拥有的。
<div class="postdrop" id="postdrop'.$streamitem_data['streamitem_id'].'">
<a class="postdrop_button postdrop_close" href="#">
<span class="a rrow"></span>
</a>
<a class="postdrop_button postdrop_open"href="#postdrop">
<span class="arrow"></span>
</a>
<ul class="postdrop_content">
<li><a href="members.php">Edit</a></li>
<li><a href="personalinformation.php">Privacy - </a></li>
<li><a href="editinformation.php">Delete</a></li>
</ul>
</div>
答案 0 :(得分:1)
你可以用普通的css做到这一点。
.postdrop_content {
display:none;
}
然后你可以调用悬停事件的显示。
.postdrop_button.postdrop_open:hover + postdrop_content {
display:block;
}
请注意,在此特定情况下,由于悬停事件将显示下拉列表,因此您将无法将鼠标悬停在其上并保持元素保持打开状态。
您有两种方法可以解决此问题:
将:hover事件移动到父contianer(在这种情况下为postdrop),并在有下拉内容时给postpe一个类,例如postdrop_has_dropdown
。然后,您可以使CSS选择器定位此元素,当您将鼠标悬停在下拉列表上时,悬停事件将保持激活状态。
.postdrop_has_dropdown:hover .postdrop_content {
display:block;
}
使用一些简单的jQuery:
$('.postdrop_button.postdrop_open').on('click', function(){
$(this).next().show();
});
$('.postdrop_button.postdrop_close').on('click', function(){
$(this).next().hide();
});
答案 1 :(得分:1)
您可以使用javascript处理它。我建议使用Knockout js http://knockoutjs.com/
使用可观察数组填充您的Feed,您可以使用您希望使用的任何事件绑定执行javascript。
<div class="myFeed" data-bind="foreach: myFeed">
<div class="feedItem" data-bind="event:{click: function(e){$root.doStuff($data e);}}">
<div class="itemAction" data-bind="event:{mouseOver: function(e){$root.handleMouseOver($data)}}"></div>
</div>
</div>
$ root对象是绑定到DOM的控制器。
$ data对象是数组中的对象
更新observableArray myFeed
时,Feed会更新var myController = function()
{
var self = this;
this.myFeed = ko.observableArray([]);
this.handleMouseOver = function(data)
{
// Do stuff with data
};
this.doStuff = function(data, e)
{
// e is the event that triggered it. e.target is the element you want to manipulate
// do stuff with data
};
};