首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Prototype JavaScript Event.observe -如何观察可能存在也可能不存在的元素

Prototype JavaScript Event.observe -如何观察可能存在也可能不存在的元素
EN

Stack Overflow用户
提问于 2012-07-15 03:08:22
回答 3查看 2.8K关注 0票数 1

我正在使用Prototype JavaScript,我有一个按钮,我想使用Event.observe方法来观察单击操作。

问题是,我想根据PHP代码中的if语句调用两个函数中的一个。我对Javascript和Event.observe方法的理解相当有限,但在尝试观察不存在的元素时,代码似乎无法工作。我可以用一种非常老套的方式让它工作,如下所示:

代码语言:javascript
运行
复制
<?php if ($_type == "forward_second"):?>
    <input type="button" id="week_backward_second" value="&lt;&lt;" disabled/>
    <input type="hidden" id="week_backward" value="&lt;&lt;" />
<?php else: ?>
    <input type="button" id="week_backward" value="&lt;&lt;" disabled/>
    <input type="hidden" id="week_backward_second" value="&lt;&lt;" />
<?php endif; ?>

在JavaScript中:

代码语言:javascript
运行
复制
initialize: function {    
    Event.observe('week_backward', 'click', this.backward.bind(this));
    Event.observe('week_backward_second', 'click', this.backwardSecond.bind(this));
},

通过拥有一个隐藏字段,“不必要的”Event.observe有了一个要观察的元素,代码就可以工作了。

有没有人能推荐一种更好的方法呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-15 03:50:07

我希望我理解了您的问题:)

代码语言:javascript
运行
复制
var element = $('week_backward'),
    method = this.backward;

// Get a second element if first doesn't exist.
if (!element) {
    element = $('week_backward_second');
    method = this.backwardSecond;
}

element.observe('click', method.bind(this));

我使用了较短的Prototype API -除非您与其他库没有冲突,否则我推荐它。

PS。我忘了提一下,现在你只需要打印一个按钮,而不是隐藏的按钮。

票数 2
EN

Stack Overflow用户

发布于 2012-10-04 16:31:32

  1. 没有隐藏字段。在观察之前检查元素的存在(如Reinmar所写):

初始化: function { if ($('week_backward')) $('week_backward').observe('click',this.backward.bind(this));if ($('week_backward_second')) $('week_backward_second').observe('click',this.backwardSecond.bind(this));},

  • 无隐藏字段。使用event delegation

初始化: function { document.on('click','#week_backward',this.backward.bind(this));document.on('click','#week_backward_second',this.backwardSecond.bind(this));},

观察者附加到document并接收从您的元素冒泡的click事件(如果存在)。

票数 1
EN

Stack Overflow用户

发布于 2014-01-21 05:51:52

处理此问题的另一种方法是使用$$和invoke。这样,您就可以迭代一个包含一个元素或不包含元素的数组,并在需要时应用该方法。

代码语言:javascript
运行
复制
$$('#week_backward').invoke('observe', 'click', this.backward);
$$('#week_backward_second').invoke('observe', 'click', this.backwardSecond);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11486602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档