Run client script on button click

Hi,
I added button in Serial Number doctype via Customization tool. Now I want to execute few functions when user clicks to the button.
Can that be done via custom script, without editing files on server?

I wrote this to Serial No custom client script.

var clicked = 0;

frappe.ui.form.on('Serial No', {
	refresh(frm) {
		frm.add_custom_button('Alter data', toggleDataFields(frm));
	}
});

function toggleDataFields(frm)
{
    clicked = ! clicked;
    frm.set_df_property('firmware_version', 'read_only', clicked);
    console.log(clicked);
}

I guess passing frm to custom function is a problem.

Uncaught TypeError: t is not a function
at HTMLButtonElement.i (page.js:452)
at HTMLButtonElement.dispatch (jquery.min.js:3)
at HTMLButtonElement.r.handle (jquery.min.js:3)

frappe.ui.form.on('Serial No', {
	refresh(frm) {
		frm.add_custom_button('Alter data', function(){
			frm.trigger("alter_data");
		});
	},
	alter_data: function(frm){
		var enable = frm.get_field("firmware_version").df.readonly;
		frm.toggle_enable('firmware_version', enable);
	}
});
3 Likes