在Mozilla中没有调用Div onclick事件

时间:2012-04-18 12:01:18

标签: javascript jquery

我的代码中有这个:

<div class="someClass">
    <div id="22" class="otherClass" onclick="goToEdit();">Title</div>
    <div class="parent">Other title</div>
</div>

function goToEdit()
{
    tree.selectItem($(event.target).attr('id'));
    btnMyButton_onclick();
}

在Chrome中一切正常,但在Mozilla中它不会对点击事件做出反应。为什么呢?

5 个答案:

答案 0 :(得分:2)

  

我收到未定义事件的错误

Doh!我们都应该意识到。

问题是event在大多数浏览器上都不是全球性的,尽管它在IE上,并且Chrome通过使其成为全局以及做它应该做的事情(传递它)而为IE设计的网站投入了骨子进入事件处理函数)。

到目前为止,您最好的选择是不要使用onclick="code"(见下文),但您也可以这样做:

<div id="22" class="otherClass" onclick="goToEdit(event);">Title</div>

...应该跨浏览器工作。它的工作原理是因为event对象是在调用onclick处理程序的特殊上下文中定义的(在以标准方式执行此操作的浏览器上),或者它是全局的(在IE上),因此它在那个点定义的方式(但不一定,作为全局,后来在你的goToEdit函数中 - 这就是为什么我们将它作为参数传递的。)

但是,我不会那样做。相反,我通过以字母开头使id值对CSS有效,并使用jQuery来连接处理程序:

HTML:

<div id="d22" class="otherClass">Title</div>

JavaScript的:

$("#d22").click(goToEdit);
function goToEdit(event) {
    tree.selectItem(event.target.id.substring(1));
    btnMyButton_onclick();
}

注意:

  • 我在传递d之前将id条带化了22。我认为原因是$(event.target).attr('id')
  • 没有理由event.target.id,只需直接使用div
  • 如果span可能包含其他元素(em s,p s,event.target s等),请注意div可能不是div,它可能是this的后代元素。 div永远是$("#d22").click(goToEdit); function goToEdit(event) { tree.selectItem(this.id.substring(1)); btnMyButton_onclick(); } ,但是(jQuery看到了),所以:

    {{1}}

答案 1 :(得分:1)

尝试将对元素的引用传递给函数。

 ... onclick="goToEdit(this);">

function goToEdit(element)
    {
       tree.selectItem($(element).attr('id'));
       btnMyButton_onclick();
    }

编辑:http://jsfiddle.net/SwUuE/4/

答案 2 :(得分:0)

HTML名称和ID令牌必须以字母开头。你有id="22"。也许它会导致浏览器之间的不一致。请参阅:http://www.w3.org/TR/html4/types.html

答案 3 :(得分:0)

根据定义,div用于将您的页面划分为不同的部分。 使用锚点或带有类型按钮标签的输入

答案 4 :(得分:0)

我也遇到了同样的问题,但是这段代码帮助了我。

我正在测试Mozilla Firefox和Chrome,它同时适用于这两种方式。

<input type="button" onclick="return goBack();" class="btn btn-warning cancel" value=" Cancel" style="color:white" />

<script>
function goBack() {
    window.history.back();
}
</script>