diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 2cf78f7e656..f23c20c23df 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -757,6 +757,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
this.$form = $('
' + xml + '
');
this.to_init = [];
+ this.labels = {};
this.process(this.$form);
this.$form.appendTo(this.$element);
@@ -764,14 +765,22 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
// - @width is obsolete ?
_.each(this.to_init, function($elem) {
- var key = $elem.attr('widget') || $elem[0].tagName.toLowerCase();
+ var tag_name = $elem[0].tagName.toLowerCase();
+ var key = $elem.attr('widget') || tag_name;
if (self.view.registry.contains(key)) {
var obj = self.view.registry.get_object(key);
var w = new (obj)(self.view, openerp.web.xml_to_json($elem[0]));
+ if (tag_name === "field") {
+ var $label = self.labels[$elem.attr("name")];
+ if ($label) {
+ w.set_input_id($label.attr("for"));
+ }
+ }
self.alter_field(w);
w.replace($elem);
}
});
+
if (openerp.connection.debug) {
$('').appendTo(this.$element).click($.proxy(this.toggle_layout_debugging, this));
}
@@ -1003,6 +1012,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
var dict = {
string: $label.attr('string') || field_orm.string || '',
help: $label.attr('help') || field_orm.help || '',
+ _for: _.uniqueId('oe-field-input-'),
};
var align = parseFloat(dict.align);
if (isNaN(align) || align === 1) {
@@ -1016,6 +1026,7 @@ openerp.web.FormRenderingEngine = openerp.web.Class.extend({
var $new_label = $(QWeb.render('FormRenderingLabel', dict));
$label.before($new_label).remove();
this.handle_invisible($new_label, $label.attr("modifiers"));
+ this.labels[name] = $new_label;
return $new_label;
},
process_button: function($button) {
@@ -1493,6 +1504,11 @@ openerp.web.form.FieldInterface = {
* syntax for "read" and "write" (example: m2o: set_value([0, "Administrator"]), get_value() => 0).
*/
get_value: function() {},
+ /**
+ * Inform the current object of the id it should use to match a html