Skip to content

ss-on ​

Arahan ss-on melampirkan pendengar peristiwa kepada elemen. Ia menyokong semua peristiwa DOM dengan modifier pilihan untuk corak biasa.

CDN ​

html
<script src="https://cdn.jsdelivr.net/npm/@bookklik/senangstart-actions@latest/dist/senangstart-actions-on.min.js"></script>

Sintaks ​

html
<element ss-on:event="expression"></element>
<element ss-on:event.modifier="expression"></element>

Peristiwa Asas ​

Klik ​

html
<div ss-data="{ count: 0 }">
  <button ss-on:click="count++">Diklik <span ss-text="count"></span> kali</button>
</div>

Peristiwa Papan Kekunci ​

html
<div ss-data="{ value: '' }">
  <!-- Trigger hanya pada Enter -->
  <input ss-model="value" ss-on:keyup.enter="alert('Dihantar: ' + value)">
  
  <!-- Trigger hanya pada Escape -->
  <input ss-on:keydown.escape="value = ''">
</div>

Peristiwa Borang ​

Submit ​

html
<div ss-data="{ email: '' }">
  <form ss-on:submit.prevent="console.log('Menghantar:', email)">
    <input type="email" ss-model="email" required>
    <button type="submit">Hantar</button>
  </form>
</div>

Modifier Peristiwa ​

.prevent ​

Memanggil event.preventDefault():

html
<a href="/somewhere" ss-on:click.prevent="handleClick()">
  Tidak akan navigate
</a>

.stop ​

Memanggil event.stopPropagation():

html
<div ss-on:click="console.log('luar')">
  <button ss-on:click.stop="console.log('dalam')">
    Tidak akan trigger klik luar
  </button>
</div>

.self ​

Trigger hanya jika sasaran peristiwa adalah elemen itu sendiri:

html
<div ss-on:click.self="closeModal()" class="modal-backdrop">
  <div class="modal">
    Klik di sini tidak akan tutup
  </div>
</div>

.once ​

Trigger hanya sekali. Pendengar dibuang daripada sasaran sebenar (elemen, window, atau document):

html
<button ss-on:click.once="initializeApp()">
  Initialize (hanya berfungsi sekali)
</button>

.outside / .away ​

Trigger hanya apabila peristiwa berlaku di luar elemen (pendengar dilampirkan pada document):

html
<div ss-on:click.outside="closeModal()" class="modal">
  Klik di luar akan tutup modal
</div>

.window dan .document ​

Lampirkan pendengar pada window atau document:

html
<div ss-on:keydown.window.slash="openSearch()">
<div ss-on:resize.window="recalculate()">

.capture dan .passive ​

Hantar pilihan pendengar kepada addEventListener:

html
<!-- Pendengar fasa capture -->
<div ss-on:click.capture="handleCapture()">

<!-- Pendengar pasif -->
<div ss-on:scroll.passive="onScroll()">

<!-- Secara jelas tidak pasif -->
<div ss-on:touchstart.passive.false="onTouch()">

.debounce dan .throttle ​

Debounce atau throttle pengendali. Lalai ialah 250ms:

html
<input ss-on:input.debounce="search(query)">
<input ss-on:input.debounce.500ms="search(query)">
<div ss-on:scroll.throttle="onScroll()">
<div ss-on:scroll.throttle.750ms="onScroll()">

.camel dan .dot ​

Tukar nama peristiwa (berguna untuk peristiwa tersuai):

html
<!-- Dengar "customEvent" -->
<div ss-on:custom-event.camel="handler()">

<!-- Dengar "custom.event" -->
<div ss-on:custom-event.dot="handler()">

Modifier Sistem ​

Macro untuk KeyboardEvent.key dan peristiwa tetikus:

  • .ctrl, .shift, .alt, .meta — kekunci sistem
  • .cmd, .super — alias untuk .meta
  • .esc — Escape
  • .space / .spacebar — Space
  • .slash — /
  • .period — .
  • .comma — ,
  • .equal — =
  • .minus — -
  • .underscore — _
  • .up, .down, .left, .right — Kekunci anak panah

Mana-mana nama kekunci, tulis dalam kebab-case (contoh .arrow-up, .page-down), boleh digunakan sebagai modifier.

Rujukan Modifier ​

ModifierTingkah Laku
.preventMemanggil event.preventDefault()
.stopMemanggil event.stopPropagation()
.selfHanya trigger apabila event.target ialah elemen itu sendiri
.onceBuang pendengar selepas pelaksanaan pertama
.outside / .awayTrigger hanya bila peristiwa berpunca di luar elemen (dilampirkan pada document)
.windowLampirkan pendengar pada window
.documentLampirkan pendengar pada document
.captureGuna fasa capture ({ capture: true })
.passiveGuna { passive: true } (atau false dengan .passive.false)
.debounce / .debounce.250msDebounce pengendali (lalai 250ms)
.throttle / .throttle.250msThrottle pengendali (lalai 250ms)
.camelTukar custom-event kepada customEvent
.dotTukar custom-event kepada custom.event
Nama kekunci / aliasTapis peristiwa papan kekunci mengikut kekunci

Mengakses Objek Event ​

Gunakan $event untuk mengakses peristiwa natif:

html
<div ss-data="{}">
  <input ss-on:input="console.log($event.target.value)">
</div>

Rujukan Kaedah Kosong (Bare Method) ​

Jika ungkapan hanya nama kaedah, ia dipanggil dengan peristiwa sebagai hujahnya:

html
<div ss-data="{ handleClick(e) { console.log(e.type) } }">
  <button ss-on:click="handleClick">Klik</button>
</div>

Contoh Langsung ​

html
<!DOCTYPE html>
<html>
<head>
  <title>Contoh ss-on</title>
  <style>
    .canvas { 
      width: 300px; 
      height: 200px; 
      border: 1px solid #ddd; 
      position: relative;
    }
    .dot {
      width: 10px;
      height: 10px;
      background: red;
      border-radius: 50%;
      position: absolute;
      transform: translate(-50%, -50%);
    }
  </style>
</head>
<body>
  <div ss-data="{ 
    clicks: [],
    addClick(e) {
      const rect = e.target.getBoundingClientRect()
      this.clicks.push({
        x: e.clientX - rect.left,
        y: e.clientY - rect.top
      })
    },
    clear() {
      this.clicks = []
    }
  }">
    <h2>Kanvas Klik</h2>
    
    <div class="canvas" ss-on:click="addClick($event)">
      <template ss-for="click in clicks">
        <div class="dot" ss-bind:style="'left:' + click.x + 'px; top:' + click.y + 'px'"></div>
      </template>
    </div>
    
    <p ss-text="clicks.length + ' klik'"></p>
    <button ss-on:click="clear()">Kosongkan</button>
  </div>

  <script src="https://unpkg.com/@bookklik/senangstart-actions"></script>
</body>
</html>

Arahan Berkaitan ​