我得到錯誤事件沒有定義
衛生署!我們都應該已經意識到了。
問題是event
在大多數瀏覽器上都不是全球性的,儘管它在IE和Chrome上,它通過使它成爲全局的東西並且做它應該做的事情(通過它進入事件)處理函數)。
你最好的迄今爲止的辦法是不使用在所有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
從開始剝離值傳遞之前。我認爲這是22
的原因。
- 沒有理由做
$(event.target).attr('id')
,只需使用event.target.id
直接。
如果div
可以含有其它元素(span
S,em
S,p
S等),注意event.target
可能不是div
,它可以是div
的後代元件。 this
永遠是div
,雖然(jQuery的看到這一點),所以:
$("#d22").click(goToEdit);
function goToEdit(event) {
tree.selectItem(this.id.substring(1));
btnMyButton_onclick();
}
你怎麼知道事件並未在Firefox(Mozilla)中被解僱?嘗試在函數goToEdit()中添加alert() – Sparky 2012-04-18 12:04:37
什麼是'tree'?它是指'window.tree',它反過來引用ID爲'tree'的元素?如果是,Firefox不會在全局範圍內爲具有ID的元素創建符號。你必須使用'document.getElementById'。 – 2012-04-18 12:07:49
@Sparky:或者更好的是,使用適當的調試器(Firefox內置一個,或者當然還有Firebug)和一個斷點。 – 2012-04-18 12:08:26