[batch modal] bind serial_no field in onchange
diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js
index c7a2f77..735f5c4 100644
--- a/erpnext/public/js/utils/serial_no_batch_selector.js
+++ b/erpnext/public/js/utils/serial_no_batch_selector.js
@@ -155,14 +155,10 @@
 	},
 
 	bind_qty: function() {
-		let serial_no_link = this.dialog.fields_dict.serial_no_select;
-		let serial_no_list_field = this.dialog.fields_dict.serial_no;
 		let batches_field = this.dialog.fields_dict.batches;
-
 		let qty_field = this.dialog.fields_dict.qty;
-
-		let update_quantity = (batch) => {
-			if(batch) {
+		if(batches_field) {
+			batches_field.grid.wrapper.on('change', function() {
 				let total_qty = 0;
 				batches_field.grid.wrapper.find(
 					'input[data-fieldname="selected_qty"]').each(function() {
@@ -170,48 +166,6 @@
 					total_qty += Number($(this).val());
 				});
 				qty_field.set_input(total_qty);
-			} else {
-				let serial_numbers = serial_no_list_field.get_value()
-					.replace(/\n/g, ' ').match(/\S+/g) || [];
-				qty_field.set_input(serial_numbers.length);
-			}
-		};
-
-		if(serial_no_link) {
-			let serial_list = [];
-			serial_no_link.$input.on('awesomplete-selectcomplete', function() {
-				if(serial_no_link.get_value().length > 0) {
-					let new_no = serial_no_link.get_value();
-					let list_value = serial_no_list_field.get_value();
-					let new_line = '\n';
-					if(!serial_no_list_field.get_value()) {
-						new_line = '';
-					} else {
-						serial_list = list_value.replace(/\s+/g, ' ').split(' ');
-					}
-					if(!serial_list.includes(new_no)) {
-						serial_no_link.set_new_description('');
-						serial_no_list_field.set_value(list_value + new_line + new_no);
-						update_quantity(0);
-					} else {
-						serial_no_link.set_new_description(new_no + ' is already selected.');
-					}
-				}
-
-				// Should, but doesn't work
-				serial_no_link.set_input('');
-				serial_no_link.$input.blur();
-			});
-
-			serial_no_list_field.$input.on('input', function() {
-				serial_list = serial_no_list_field.get_value().replace(/\s+/g, ' ').split(' ');
-				update_quantity(0);
-			});
-		}
-
-		if(batches_field) {
-			batches_field.grid.wrapper.on('change', function() {
-				update_quantity(1);
 			});
 		}
 	},
@@ -319,6 +273,7 @@
 
 	get_serial_no_fields: function() {
 		var me = this;
+		this.serial_list = [];
 		return [
 			{fieldtype: 'Section Break', label: __('Serial No')},
 			{
@@ -326,10 +281,46 @@
 				label: __('Select'),
 				get_query: function() {
 					return { filters: {item_code: me.item_code}};
+				},
+				onchange: function(e) {
+					if(this.in_local_change) return;
+					this.in_local_change = 1;
+
+					let serial_no_list_field = this.layout.fields_dict.serial_no;
+					let qty_field = this.layout.fields_dict.qty;
+
+					let new_number = this.get_value();
+					let list_value = serial_no_list_field.get_value();
+					let new_line = '\n';
+					if(!list_value) {
+						new_line = '';
+					} else {
+						me.serial_list = list_value.replace(/\n/g, ' ').match(/\S+/g) || [];
+					}
+
+					if(!me.serial_list.includes(new_number)) {
+						this.set_new_description('');
+						serial_no_list_field.set_value(me.serial_list.join('\n') + new_line + new_number);
+						me.serial_list = serial_no_list_field.get_value().replace(/\n/g, ' ').match(/\S+/g) || [];
+					} else {
+						this.set_new_description(new_number + ' is already selected.');
+					}
+
+					qty_field.set_input(me.serial_list.length);
+					this.$input.val("");
+					this.in_local_change = 0;
 				}
 			},
 			{fieldtype: 'Column Break'},
-			{fieldname: 'serial_no', fieldtype: 'Small Text'}
+			{
+				fieldname: 'serial_no',
+				fieldtype: 'Small Text',
+				onchange: function() {
+					me.serial_list = this.get_value()
+						.replace(/\n/g, ' ').match(/\S+/g) || [];
+					this.layout.fields_dict.qty.set_input(me.serial_list.length);
+				}
+			}
 		];
 	}
 });
\ No newline at end of file