我正在尝试使用带有以下代码的jquery动态创建表单
function createFieldSet(dataArray) {
var fieldset = $('fieldset');
$.each(dataArray, function(key, value) {
for(var key in value) {
if (key.toLowerCase() === "other") {
fieldset.append($('<button/>').attr({ type: 'button', name:'btn_' + key, value: key}).on('click', 'textOther', function() {alert('click');}).html(value[key]));
fieldset.append($('<input/>').attr({ type: 'text', name:'textOther', value: ""}).hide);
} else {
fieldset.append($('<button/>').attr({ type: 'button', name:'btn_' + key, value: key}).html(value[key]));
}
fieldset.append('<br />');
}
});
}
但返回标题中显示的错误,指向附加输入行的第二行,我试图在创建时隐藏它,除非单击上面创建的按钮。想知道为什么当我没有调用这样的函数时,我会得到一些关于动画的东西,如果这是可修复/可行的......或者如果这应该是用服务器端语言完成的。
答案 0 :(得分:2)
问题是hide
上缺少括号,此处为
fieldset.append(
$('<input/>').attr({
type: 'text',
name:'textOther',
value: ""
}).hide
);
应该是
fieldset.append(
$('<input/>').attr({
type: 'text',
name:'textOther',
value: ""
}).hide()
);
但这是一个时髦的语法,你应该写它
fieldset.append(
$('<input />', {
type : 'text',
name : 'textOther',
value : ""
css : {
display : 'none'
}
})
);
它发生的原因是因为jQuery具有以下内部函数
jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
var cssFn = jQuery.fn[ name ];
jQuery.fn[ name ] = function( speed, easing, callback ) {
return speed == null || typeof speed === "boolean" ?
cssFn.apply( this, arguments ) :
this.animate( genFx( name, true ), speed, easing, callback );
};
});
其中jQuery实际上正在寻找属性hide
,并且它会以某种方式从对象中添加.hide
来获取它,我不会再查找源代码以确定它为什么会发生,因为这只是你的一个错字,而不是那么有趣。
答案 1 :(得分:1)
问题是您使用了
fieldset.append(
$('<input/>').hide
);
但它应该是
fieldset.append(
$('<input/>').hide()
);
第二个代码运行函数hide
并返回元素,因此您可以追加它。