2010-03-08 52 views
2

我剛剛遇到了這個在IE中發生的奇怪問題。在HTML我加入了一個onclick事件來調用一個函數來改變這樣的頁面元素,如何使用jQuery覆蓋內聯JavaScript事件?

onclick="changePage(1, 2);" 

裏面的changePage功能,我改變了currentPageNum,並向前和向後按鈕nextPageNum當函數被調用這個樣子,

function changePage(currentPageNum, nextPageNum) { 

    var pageValidated = true; 

    //If the current page content validates, then we can change the page 
    if(pageValidated) { 
    //Add new events to both arrow buttons 
    $('#goBack').attr('onclick', '').unbind().click(function() { 
     changePage(nextPageNum, parseInt(nextPageNum) - 1); 
    }); 

    $('#goForward').attr('onclick', '').unbind().click(function() { 
     changePage(nextPageNum, parseInt(nextPageNum) + 1); 
    }); 
    } 
} 

我加入了ATTR(「的onclick」,「」).unbind(),以刪除舊的onclick事件,然後添加新的。這在FF中工作正常,但在IE中它出於某種原因同時調用了新的點擊事件和舊的事件。我認爲當你附加一個新的點擊事件時,舊事件就會消失,但現在看起來並不是這樣。我怎樣才能在IE瀏覽器中工作?

我想我知道現在發生了什麼。當調用changePage函數時,它將刪除舊的onclick事件,在第一個onclick事件之後添加新事件,然後調用在第一個事件被調用後直接添加的onclick事件。這就好像我在同一個onclick事件中有2個函數調用一樣。

我正在使用jQuery版本1.4.2。我從這個函數中刪除了額外的內容來簡化它,但這是導致問題的部分。

感謝您的幫助, 都市報

回答

1

我相信解決這個問題的最好方法是不要再創建內嵌JavaScript事件以及jQuery事件。我的猜測是,這導致jQuery不知道其他地方發生了什麼事件,因此兩個事件都會運行。我應該怎麼做,而不是這裏把下面的代碼到一個外部JavaScript文件

$(function() { 
    $('#ele').click(function() { 
     changePage(1, 2); 
    }); 
}); 

這將允許該事件的jQuery時,它得到changePage函數內改變。如果這是錯誤的邏輯,請糾正我。

Metropolis

0

解除綁定使用jQuery事件正確的方法是:

$('#goBack').unbind("click").click(function() { 
    changePage(nextPageNum, parseInt(nextPageNum) - 1); 
}); 

如果由於某種原因,仍然失敗,您可以嘗試:

$("#goBack").click(undefined); 

或者:

document.getElementById("goBack").click = undefined; 
+0

但是不解除綁定()unbind所有事件? – Metropolis 2010-03-08 17:02:46

+0

,你不需要添加attr('onclick','')來解決一些瀏覽器不能刪除事件的問題嗎? – Metropolis 2010-03-08 17:03:24

+0

我試了你的方式,我仍然有同樣的問題..... – Metropolis 2010-03-08 17:05:17