2012-04-18 33 views
1
事業部onclick事件

我有這個在我的代碼:不叫在Mozilla

<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不作出反應,點擊事件。爲什麼?

+1

你怎麼知道事件並未在Firefox(Mozilla)中被解僱?嘗試在函數goToEdit()中添加alert() – Sparky 2012-04-18 12:04:37

+0

什麼是'tree'?它是指'window.tree',它反過來引用ID爲'tree'的元素?如果是,Firefox不會在全局範圍內爲具有ID的元素創建符號。你必須使用'document.getElementById'。 – 2012-04-18 12:07:49

+1

@Sparky:或者更好的是,使用適當的調試器(Firefox內置一個,或者當然還有Firebug)和一個斷點。 – 2012-04-18 12:08:26

回答

2

我得到錯誤事件沒有定義

衛生署!我們都應該已經意識到了。

問題是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(); 
    } 
    
0

HTML名稱和id令牌必須以字母開頭。您有id="22"。也許它會導致瀏覽器之間的不一致。請參閱:http://www.w3.org/TR/html4/types.html

+0

是和不是。 :-)從HTML5開始,該ID對於HTML和DOM *是很好的(http://www.w3.org/TR/html5/elements.html#the-id-attribute),這裏的規範只是記錄現有的行爲(瀏覽器對'document.getElementById(「22」)''沒有問題)。 CSS仍然要求[以字母開頭](http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier)。 – 2012-04-18 12:22:51

+0

...我很高興地看到,我試過的所有瀏覽器(Chrome,Firefox,Opera,IE9)在標準模式下在document.querySelector(「#22」)上正確地拋出了一個錯誤; Chrome和Firefox在quirks模式下也會出錯,而Opera允許使用無效的CSS'id',而IE9則報告它根本沒有'querySelector'。所以它將取決於'tree.selectItem'的作用以及它是否在DOM選擇中使用了'id'值。測試:[標準](http://jsbin.com/acedug)| [怪癖](http://jsbin.com/acedug/2) – 2012-04-18 12:23:21

0

按照定義,div用於將頁面劃分爲不同的部分。 使用錨點或輸入類型按鈕標記代替

1

嘗試將對元素的引用傳遞給函數。

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

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

編輯:http://jsfiddle.net/SwUuE/4/

+0

感謝里克它幫助了我! – 2017-07-07 07:27:46

0

我想,你可以從你的HTML

<div class="someClass"> 
    <div id="22" class="otherClass">Title</div> 
    <div class="parent">Other title</div> 
</div> 

刪除 「點擊」 再試試看吧這樣

$('#22').on('click', function (e) { 
    your code 
}); 

但是如果你的DIV ID = 「22」將被動態地添加你應該使用這樣的

$('parent').on('click', '#22', function (e) { 
    your code 
}); 
其中「父」

- 靜態元素的文件已經存在,然後再點擊

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>