---
title: "Client Scripts"
space: "Frappe Framework"
url: "https://www.prilk.com/nl/docs/frappe-framework/client-scripts"
updated: "2026-05-14"
---

## Client Scripts

Een Client Script draait JavaScript in de browser wanneer een DocType-formulier open is. Gebruik voor:

- Velden tonen/verbergen op basis van waarden
- Afgeleide velden client-side berekenen
- Eigen actieknoppen toevoegen
- Invoer valideren vóór opslag

Voor de meeste gevallen zijn Client Scripts de juiste keuze — snel, geen page-reload, directe feedback.

### Aanmaken
**Customize → Client Script → New**: kies DocType, view (Form/List), plak uw JS.

### Form-events

```javascript
frappe.ui.form.on("Sales Invoice", {
    refresh(frm) {
        // Bij elke laad/reload
        if (frm.doc.status === "Paid") {
            frm.add_custom_button("Print Receipt", () => {
                window.open(`/api/method/erpnext.print_receipt?invoice=${frm.doc.name}`);
            });
        }
    },
    customer(frm) {
        // Bij wijziging van het customer-veld
        frappe.msgprint(`Geselecteerd: ${frm.doc.customer}`);
    },
    validate(frm) {
        // Vóór opslag
        if (frm.doc.grand_total > 100000) {
            frappe.throw("Facturen boven 100k vereisen managergoedkeuring");
        }
    }
});
```

### Child table-events

```javascript
frappe.ui.form.on("Sales Invoice Item", {
    qty(frm, cdt, cdn) {
        const row = locals[cdt][cdn];
        frappe.model.set_value(cdt, cdn, "amount", row.qty * row.rate);
    }
});
```

### Server aanroepen

```javascript
frappe.call({
    method: "myapp.api.check_credit_limit",
    args: { customer: frm.doc.customer, amount: frm.doc.grand_total },
    callback: (r) => {
        if (!r.message.ok) frappe.throw("Boven kredietlimiet");
    }
});
```

### Beperkingen
- Draait in de browser — invoer hier nooit vertrouwen voor security. Altijd hervalideren op de server in een Server Script of whitelisted method.
- Fouten falen stil tenzij u de browserconsole bekijkt. Voeg `console.error()` toe tijdens itereren.

Voor server-side afdwingen: zie [Server Scripts](/nl/docs/frappe-ecosystem/server-scripts).
