2012-07-04 88 views
2

寫元素上不工作,我有一些jQuery代碼是這樣的:jQuery函數,通過innerHTML的

$(function($) { 
$('input.autonumeric').autoNumeric({aSep: ',', aDec: '.',vMax:'1000000000000'}); });  

與該代碼,每次輸入的文本有autonumeric -class只能用數字輸入。

但是當我從innerHTML寫入輸入文本標記時,它根本不起作用。這是我如何寫代碼:

function edit(){ 
    var current = window.event.srcElement; 
    while ((current = current.parentElement) && current.tagName !="TR"); 
    var row = current.childNodes; 
    td = row.item(0); var temp = td.innerHTML; 
    td.innerHTML = "<input type=\"text\" value=\""+temp+"\" class=\"autonumeric\" \>"; 
} 

我該如何解決這個問題?注意:如果我的英文不夠好,我很抱歉。

+0

您的代碼是否會輸出多個文本輸入? while語句後面有一個分號。即使你把分號取出來,只有'var row = current.childNodes;'這一行會循環,因爲你在'while'語句之後沒有使用花括號'{}'。 –

+0

我不確定。 「而」我從其他博客得到的代碼行。但我認爲,該行意味着「使」當前「變量到'tr'標籤位置,所以,」current = current.parentElement「代碼裏面的」while「同時也改變了」當前「變量的內容.. – Ahok

+0

哦沒關係,沒有意識到while循環中有一個'=',第一部分總是返回true,而第二部分保證循環將被重複,直到當前元素的tagName與'TR'不同,它可以是 –

回答

1

您必須爲新添加的元素運行autoNumeric。 你可以就在創造這樣的新的輸入的做到這一點:

$(td).html($("<input type=\"text\" value=\""+temp+"\" class=\"autonumeric\" \>").autoNumeric({'....'})); 

或留下您的版本,然後再次運行

$('input.autonumeric').autoNumeric({aSep: ',', aDec: '.',vMax:'1000000000000'}); }); 

之後。

+0

謝謝...它的工作原理... – Ahok

0

既然您已經在使用jQuery,爲什麼不用jQuery創建元素?

var e = $('<input type="text" />'); 
e.autoNumeric({aSep: ',', aDec: '.',vMax:'1000000000000'}); }); 
td.html(e); 

當然,您需要調整代碼的其他部分以確保td是一個jQuery對象。

+0

雖然這並沒有創建jQuery對象。 'e'只是一個字符串,並且會拋出一個錯誤,因爲字符串沒有方法'autoNumeric' – Andy

+0

確實,在字符串周圍忘了$()。 – Havsmonstret

0

當運行jQuery插件方法.autoNumeric(...)時,它會影響DOM中當前存在的所有輸入字段。當調用edit()並創建新的input.autonumeric時,必須再次撥打.autonumeric(...)

0

添加innerHTML後,應該再次調用autoNumeric函數。這是因爲在頁面加載時執行的代碼只能在頁面加載時「查看」DOM中存在的元素。一旦你添加元素,你將不得不將你的事件附加到它。

+0

怎麼樣的CSS,是否需要重新加載以獲得CSS效果呢? – Ahok

+0

不,在顯示元素時應用css(來自外部樣式表或樣式元素)。當然,如果您在頁面加載時將CSS添加到JavaScript元素(內聯樣式,例如'$(「span」).css(「color」,「red」);'),然後添加新添加的元素元素在您以編程方式應用之前不會有此樣式。 –