jQuery 在焦点/模糊上切换同级
所以我现在有了这个并且它可以工作,但我想知道在我编写移动网站时是否有最佳的编写方式,以及性能是否是一件大事。
想想在元素下滑动(切换)的工具提示,我在页面上还有大约 30 个工具提示 div,因为这将用于多个元素
JS:
$('.mobile-tool-tip').each(function() {
$(this).hide();
$(this).prev().focus(function() {
$(this).next().slideToggle('fast');
});
$(this).prev().blur(function() {
$(this).next().slideToggle('fast');
});
});
移动工具提示功能的 HTML
<div data-role="fieldcontain">
<input type="text" name="telephone" id="telephone" placeholder="Phone Number*" />
<div class="mobile-tool-tip" id="telephone_tip">Valid format <strong>999-999-9999</strong>. Please include the area code.</div>
</div>
一直在使用这个(感谢 Hunter) 来切换元素,但无法让它与 next() 一起使用,而且我不想对每个工具提示 div 进行编码手工
$("[name=field_name]").change(function() {
var show = $(this).val();
$("#hidden_div").toggle(show);
});
So I have this now and it works, but I wanted to know if there is an optimal way of writing this as I writing a mobile site and performance if a big thing.
Think tool-tip that slides down (toggles) under the element, I also have about 30 tool tip divs on the page as this will be for multiple elements
JS:
$('.mobile-tool-tip').each(function() {
$(this).hide();
$(this).prev().focus(function() {
$(this).next().slideToggle('fast');
});
$(this).prev().blur(function() {
$(this).next().slideToggle('fast');
});
});
HTML for mobile-tool-tip function
<div data-role="fieldcontain">
<input type="text" name="telephone" id="telephone" placeholder="Phone Number*" />
<div class="mobile-tool-tip" id="telephone_tip">Valid format <strong>999-999-9999</strong>. Please include the area code.</div>
</div>
Have been using this (Thanks Hunter) to toggle elements but cant get it to work with the next() and I don't want to code each tool tip div by hand
$("[name=field_name]").change(function() {
var show = $(this).val();
$("#hidden_div").toggle(show);
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一些建议:
.mobile-tool-tip
元素可以节省几毫秒的时间。next
或prev
元素并且它是特定元素时,我始终建议使用 `nextAll(".mobile-tool-tip")$(this).prev()
非常耗时。不要做两次。 jQuery 中的许多函数都会返回对最后一次查询的引用,这使您能够链接调用(类似于$(".anElement").hide().remove()
)。利用它来节省时间。聚焦
操作和其他模糊
操作时,请使用确定性方法来隐藏/显示或启用/禁用元素。这将确保您不会错过任何活动或特殊场合,并防止出现任何与之相关的错误。所以:
});
祝你好运!
A few suggestions:
.mobile-tool-tip
elements with CSS.next
orprev
elements, and it's an specific element, I always suggest to use `nextAll(".mobile-tool-tip")$(this).prev()
. Don't do it twice. A lot of functions in jQuery returns a reference to the last query made, this is what enables you to chain calls (something like$(".anElement").hide().remove()
). Make use of it to save time.focus
and other toblur
, use an deterministic method to hide/show or enable/disable elements. This'll ensure that you didn't miss any event or special occasion, and will prevent for any bug related to it.So:
});
Good luck!
一些简单的想法。
所以你最终可能会得到这样的结果...
jsfiddle 在触发时显示出轻微的性能增益带有关闭的事件。
Some simple thoughts.
So you might end up with something like this...
jsfiddle that shows a slight performance gain when triggering the event with a closure.
您可以尝试使用变量来保存 $(this).next() 元素,从而组合对 DOM 的一些调用。根据文件的大小,这可以节省大量时间,而不必进行两次调用。
You can try to combine some of the calls to the DOM by using a variable to hold the $(this).next() element. Depending on how big the file is, this can cut a substantial amount of time not having to make that call twice.