我使用小部件工厂创建了一个小部件,并添加<input>
了它所需的元素。这个小部件可以在form
元素内部初始化,从而在提交父表单时提交添加的字段。
我想告诉form
不要提交指定的输入,这必须在小部件内完成,因为这是知道添加input
元素的那个。
这个想法是从内部小部件中获取最接近form
的并在提交表单之前禁用输入(例如.prop("disabled", true)
),然后重新启用它们。
重要的是不要打扰小部件之外的代码,我想保持低耦合。
不幸的是,在_create
小部件期间,this.element
没有添加到,DOM
因此无法向表单的提交事件添加处理程序。
示例代码:
$(function ()
{
$.widget("Foo.Widget",{
_create: function(){
this.element.append($("<input type='radio'>").attr("name", "theInput"));
// bind to the containing form's submit event
var form = this.elemeng.closest("form"); // returns $()
};
});
});
可以绑定后者,但这需要用户以某种方式与小部件进行交互,这不是强制性的。
我可以添加一个计时器并稍后绑定它,因为用户不会在前几秒内提交它(邪恶的解决方案)。
此外,我可以将小部件的上下文或父级form
作为选项传递,但这是我想避免的。