2012-04-23 102 views
2

我有一個是寫在javascript的功能,我想重寫,在jQuery這是函數代碼:event.srcElement.value相當於jQuery的

function onclickRbtn(controlID , Message) 
    { 
     var s = document.getElementById(controlID); 
     var sVal = event.srcElement.value; 
     for (var i = 0; i < s.rows.length; i++) 
      { 
      if (s.getElementsByTagName("input")[i].value == sVal) 
       s.getElementsByTagName("label")[i].innerText = Message; 
     } 
     s.disabled = 'disabled'; 
    } 

這是什麼代碼:事件。 srcElement.value`和jQuery中的等價物是什麼?

感謝

回答

3

你的意思是這樣的:

$("button").click(function(){ 
    var value = $(this).val(); 
}); 
+0

這是最直接的答案,無論重新編寫函數的其餘部分,這是有道理的,因爲你特別關心jQuery。 – 2013-01-23 16:22:09

+0

這是對以下概念的邏輯重構: 1)在jQuery 1.9中,折舊(和刪除)srcElement屬性被替換爲「target」,所以「event.srcElement.value」轉到「event.target.value 」。 2)在jQuery中,您可以直接使用「$(this).val()」在事件處理程序的上下文中(即您的點擊函數聲明)直接訪問該值。 3)jQuery的一個主要優點是通過在諸如「.on()」,「.click()」等選擇器上使用委託函數來減少子例程... – 2013-01-23 16:30:37

3

如果您有JavaScript代碼,請執行操作不要在jQuery中重寫它。這就像說:「這把錘子可以把釘子推到牆上,但我想用大錘代替。」

這且不說,你的代碼是獨家IE 8及以下時,它不會在IE 9或其他瀏覽器,因爲它使用專門術語(如全球event對象,srcElement ...)

下面是你應該使用的代碼:

function onclickRbtn(controlID,Message,evt) { 
    evt = evt || window.event; 
    var s = document.getElementById(controlID), 
     sVal = (evt.srcElement || evt.target).value, 
     inputs = s.getElementsByTagName('input'), 
     labels = s.getElementsByTagName('label'); 

    for(var i=0; i<s.rows.length; i++) { 
     if(inputs[i].value == sVal) labels[i].innerText = labels[i].textContent = Message; 
    } 
    s.disabled = true; 
} 

而且無論你連接時,請確保您的事件添加到的參數。示例:

<element onclick="onclickRbtn(controlID, Message, event);"> 
elem.onclick = function(e) {onclickRbtn(controlID, Message, e);}; 
2

這適用於IE9,IE 8,IE7,Chrome 22,Safari 5.7.1。它不適用於FF 14:

$(event.srcElement || event.target);