2010-12-13 348 views
0

我想向已經渲染的按鈕代碼添加更多功能。 做到這一點的唯一方法是使用Javascript,因爲它之前從服務器呈現,而我只能訪問JSP。通過Javascript修改onClick屬性

這是我現在擁有的,但它不工作,它只顯示兩次相同的消息。如果我點擊該按鈕,則不顯示警報「hello」。

<script type="text/javascript"> 
function addEventBefore(element, type, fn) { 
    var old = element['on' + type] || function() {}; 
    element['on' + type] = function() { fn(); old(); }; 
} 

function sayHello(){ 
    alert('hello'); 
} 

var arr = document.getElementsByTagName("button"); 
for (i = 0; i < arr.length; i++) { 
    if (arr[i].getAttribute("name") == "Complete"){ 
    var theclick = arr[i].getAttribute("onClick"); 
    alert(theclick); 
    addEventBefore(arr[i], 'Click', sayHello); 
    var theclick2 = arr[i].getAttribute("onClick"); 
    alert(theclick2); 
    } 
} 
</script> 

這是頁面的渲染代碼:

<td valign='top' align='right' > 
<button name="Complete" title="The complete Button" 
onClick="document.forms.TaskInfoPage.action='http://prodserver:8080/Approval.jsp?windowId=dd4c0&eventTarget=stepApproval&eventName=Complete' 
document.forms.InfoPage.submit();return false;">Complete</button> 
</td> 

所以,我要放置的sayHello()它的的onClick行動之前。

回答

0

這是onclick而非onClick,所以你需要這樣的:

addEventBefore(arr[i], 'click', sayHello); 
        //^lower case here 

屬性本身仍不會顯示任何內容不同,但事件本身會工作,you can test it here。此外,爲了保持this您的事件處理程序,我建議你至少.call()的功能,如:

function addEventBefore(element, type, fn) { 
    var old = element['on' + type] || function() {}; 
    element['on' + type] = function() { fn.call(this); old.call(this); }; 
} 
+0

我'試過onclick'第一,得到了相同的結果,那麼我想'onClick';要試試電話() – elcool 2010-12-13 19:30:11