我正在使用Prototype JavaScript,我有一个按钮,我想使用Event.observe方法来观察单击操作。
问题是,我想根据PHP代码中的if语句调用两个函数中的一个。我对Javascript和Event.observe方法的理解相当有限,但在尝试观察不存在的元素时,代码似乎无法工作。我可以用一种非常老套的方式让它工作,如下所示:
<?php if ($_type == "forward_second"):?>
    <input type="button" id="week_backward_second" value="<<" disabled/>
    <input type="hidden" id="week_backward" value="<<" />
<?php else: ?>
    <input type="button" id="week_backward" value="<<" disabled/>
    <input type="hidden" id="week_backward_second" value="<<" />
<?php endif; ?>在JavaScript中:
initialize: function {    
    Event.observe('week_backward', 'click', this.backward.bind(this));
    Event.observe('week_backward_second', 'click', this.backwardSecond.bind(this));
},通过拥有一个隐藏字段,“不必要的”Event.observe有了一个要观察的元素,代码就可以工作了。
有没有人能推荐一种更好的方法呢?
发布于 2012-07-15 03:50:07
我希望我理解了您的问题:)
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。我忘了提一下,现在你只需要打印一个按钮,而不是隐藏的按钮。
发布于 2012-10-04 16:31:32
初始化: 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));},
初始化: function { document.on('click','#week_backward',this.backward.bind(this));document.on('click','#week_backward_second',this.backwardSecond.bind(this));},
观察者附加到document并接收从您的元素冒泡的click事件(如果存在)。
发布于 2014-01-21 05:51:52
处理此问题的另一种方法是使用$$和invoke。这样,您就可以迭代一个包含一个元素或不包含元素的数组,并在需要时应用该方法。
$$('#week_backward').invoke('observe', 'click', this.backward);
$$('#week_backward_second').invoke('observe', 'click', this.backwardSecond);https://stackoverflow.com/questions/11486602
复制相似问题