2012-01-20 23 views
0

我有一個使用試圖更改onchange中的所有數字 - onchange.replace不起作用?

<xsl:variable name="pos" select="Position()"/> 
在平變化事件

onchange="updateDropdown({$pos});someElement_{$pos}.value = {$pos}"; 

當上頁p的評價

一個xsl頁=加載此將被讀取爲

onchange="updateDropdown(1);someElement_1.value = 1"; 
onchange="updateDropdown(2);someElement_2.value = 2"; 
onchange="updateDropdown(3);someElement_3.value = 3"; 

當添加一個行使用一個按鈕,它將整個第一行復制到它必須經過的底部並更新這些數字,因爲它沒有被處理

我做

lastRowEl = rowEls[rowEls.length-1]; 

然後

lastRowEl.id = "element_" + rowEls.length 
lastRowEl.value = ""; 

最後,

lastRowEl.onchange = lastRowEl.onchange.replace(/\d/g, rowEls.length) 

ID獲取改爲element_4 值被修改爲空白

但onchange.replac E不工作,所以平變化如何能代替所有的數字在平變化的功能仍然是

onchange="updateDropdown(1);someElement_1.value = 1"; 

instaead的

onchange="updateDropdown(4);someElement_4.value = 4"; 

,並在最後一次修改該元素的數字重置平變化的功能行?

感謝

+0

對不起,但......什麼?你能向我們展示一個測試用例嗎? –

+0

不幸的是,這並不容易,因爲它運行在一個使用Internet Explorer的專有客戶端,因爲它的基礎(然而有額外的功能通常不可用)....但是,是onchange.replace有效的方法?如果是這樣,我需要el.onchange = eval(el.onchange.replace(...))還是不需要eval? –

+0

我不明白你的迴應。在初始調試階段,通過消除過程創建測試用例。您應該將問題隔離到IE並在jsfiddle.net上提交測試用例;如果您設法將其隔離到專有客戶端內,那麼我們無法幫助您... –

回答

1

這似乎有點不可思議,我不知道爲什麼它在所有工作,因爲你lastRowEl.onchange返回的值是最有可能的一個功能,而不是一個字符串。一些自動調用toString()似乎發生在您的平臺上(當我在Safari中測試時不起作用)。但是,結果很可能是多行字符串,您可能需要使用多行RegExps。 /\d/mg

即使這個工程是非常醜陋的。怎麼樣定義一個函數來處理你的處理程序中的所有調用?

function onchangeHandler(index) { 
    updateDropdown(index); 
    window["someElement_" + index].value = index; 
} 

這樣,你會在HTML

< ... onchange="onchangeHandler(1);" .... /> 

分配這些處理功能和更新它們在Javascript

(function() { 
    var index = rowEls.length; 
    lastRowEl.onchange = function() {onchangeHandler(index);}; 
})(); 

注意分配繞封蓋是可能沒有必要取決於你周圍的代碼。不過,您很可能需要顯式索引變量定義。

+0

謝謝,當我訪問客戶端機器時,我會嘗試一下。 (它也很整潔)。當我做出更改時我會更新 –

1

請嘗試以下解決方案

var onch = new String(lastRowEl.onchange); 
onch = onch.replace(/\d/g, rowEls.length); 

lastRowEl.onchange = new Function(onch); 

按預期這將工作。

希望這可以解決您的問題。