2012-02-18 53 views
0

我正在參加一個Javascript類,並想知道是否有一種方法可以告訴在調用某個函數時選擇了哪個按鈕。我基本上有這樣的方法:Javascript,確定在某個函數中選擇了哪個按鈕,類似於iOS中的(id)發件人?

function sendRequest() 
{ 
    var url = "http://classwebsite/bookmarks.php"; 
    url += "?userid=crystal"; 
    var transmission = document.getElementById("transmission").value; 
    url += "&response=" + transmission; 
    var callback = {success:handleResponse, 
        failure:handleFailure, 
        timeout:5000 
        }; 

    var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null); 
} 

當按下按鈕時調用此方法。它基本上以適當的JSON,XML等格式取回教授的迴應並顯示它。我想添加一個「添加」功能來向表中添加新行。這是通過調用同一URL以上述方法,只是手動把這個在地址欄做:

http://classwebsite/bookmarks.php?userid=crystal&action=add&name=yahoo&url=yahoo.com&desc=Yahoo+website 

在這種情況下,如果我有所謂的「添加」,另一個按鈕從表格中的字段的添加,將我調用相同的sendRequest()方法,並相應地修改url?如果是這樣,如果「List」按鈕和「Add」按鈕都綁定到相同的事件處理程序,我怎麼知道哪個按鈕被按下了。

或者是更好的設計有另一種方法,處理addRequest()並只是添加表單中的字段?謝謝。

回答

0

你應該可以修改你的javascript函數的參數來查看發件人。

還有一個叫做參數的隱藏數組,可以讓您查看函數可用的參數,以防萬一您好奇。

function sendRequest(sender, args) { 
    //sender is your clicked button 

    var url = "http://classwebsite/bookmarks.php"; 
    url += "?userid=crystal"; 
    var transmission = document.getElementById("transmission").value; 
    url += "&response=" + transmission; 
    var callback = {success:handleResponse, 
        failure:handleFailure, 
        timeout:5000 
        }; 

    var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null); 
} 
0

如果按下按鈕,則應將一個事件傳遞給函數。事件對象包含其他事物中的點擊的target

​​

你會注意到幾個if語句在那裏......這是因爲IE與標準有點不同。但是,我看到你使用雅虎庫爲你的一些js。我想如果你要使用這個庫的設施來綁定你的事件,它也會標準化傳入你的回調函數的事件對象,所以你不必手動創建xbrowser適應。

1

如果您確實使用了像他們應該使用的Yahoo使用程序(即通過YAHOO.util.Event.addListener()),那麼您的按鈕將被this引用。

請參閱YUI文檔中的Automatic Scope Correction

另外,請在使用前正確編碼URL參數。

var transmission = document.getElementById("transmission").value, 
    url = "http://classwebsite/bookmarks.php" 
     + "?userid=crystal" 
     + "&response=" + encodeURIComponent(transmission); // <- !! 
相關問題