2012-07-04 53 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”);'),然后添加新添加的元素元素在您以编程方式应用之前不会有此样式。 –