试试这个:
$(document).on('click', '.postreply', function(e) {
$(this).closest('.blogcontainer').siblings('.blogcontainer').find('.postreplycontainer').slideUp("fast");
$(this).closest('.blogcontainer').find('.postreplycontainer').slideToggle("fast")
.find('textarea[name=replycontents]').focus();
});
在这里,我使用一个事件来处理$(document).on
所有元素,包括现在和未来(动态)。请记住,如果您曾经使用过 jQuery *pre*1.7,那么您只需更改为. 既然是委托,一度似乎是合适的,然而,时代变了。现在,如果您愿意,您仍然可以使用“.delegate”。jQuery 已经注意到它们没有“弃用”,也没有打算删除. 他们只是觉得1.7 中的实现被取代了,因此他们推荐用于委托。delegate
.on
.delegate
.delegate
.delegate
.on
.delegate
.on
如您所见,使用委托形式.on
非常简单。规则很简单。$(selector)
应该是“存在 onload”的“父”元素,或者您可以简单地使用$(document)
.
您的.on
参数同样简单。第一个参数是event
您要分配的字符串名称。请记住,您可以只用一个空格来分配多个事件;exp 'change keydown'
(这是 textareas 的流行事件分配)。
第二个参数与任何其他 jQuery 选择器一样。请记住,将分配满足要求的所有元素。所以类似的东西'div'
会将一个事件分配给所有 div 元素。
最后是“回调”方法。e
当然代表传入的那个event Object
。例如e.target
在函数中与$(this)
至于#3
如果您每次都重新加载页面,那么只需找到第一个包含内容的文本区域并下拉其父容器。这仅仅意味着添加一行简单的代码:
$('.blogcontainer textarea[name=replycontents]').filter(function(i) { return $.trim($(this).val()) != ""; }).closest('.postreplycontainer').slideDown("fast");
把它分解一些:
$('.blogcontainer textarea[name=replycontents]')
: 我想你现在已经了解了选择器,但请注意,记住,你可以使用“任何”CSS 选择器作为 jQuery 选择器。
.filter(function(i) { return $.trim($(this).val()) != ""; })
:这个方便的小 jQuery 方法允许我们根据给定的回调“过滤”“选择”的结果。
.closest('.postreplycontainer')
:只需抓取与选择器匹配的最近的父元素。
- 为什么我们现在需要父母?好吧,我们找到了带有内容的文本区域,现在我们需要扩展父级。
- 请记住,虽然多个文本区域可能有内容,但一旦我们将其添加到链中,我们只会获得第一个具有内容的父项
.slideDown("fast");
: 最后,。通过向下滑动带有内容的盒子来关闭链条!
在这里看小提琴!请记住,我不会“重新加载”页面或任何东西。但是通过在那里设置线条,第一个带有内容的框总是会向下滑动。如果不希望这样做,您可能需要考虑使用jQuery 的 Ajax来编辑框。