# useOn() / useOnDocument() / useOnWindow() - Programmatic Listeners > * 如有錯誤處指正或任何建議,懇請留言,感謝! > * 搭配 ChatGPT 進行翻譯,請小心服用 > * ▸ ... 為英文原文 :::spoiler ... There are times when your app needs to add a conditional listener. Sometimes a listener name is unknown, or you need to use an imperative approach to set up a listener. Qwik provides the following functions to attach a listener: | Function | Description | | --- | --- | | `useOn()` | Add an event on specific event on current host element. | | `useOnDocument()` | Add an event on specific event on document. | | `useOnWindow()` | Add an event on specific event on window. | > **Your task**: Set up a click listener on the component to call `alert('Hello world!')`. Understanding the `$` --------------------- The `$` function signals Qwik to lazy load a reference. When setting up a listener with `useOn`, the second argument is a [Qwik URL](https://qwik.builder.io/docs/advanced/qrl/). Qwik URLs (QRL) are lazy-loadable references to your code. If `useOn` took a function directly rather than QRL, it would have to eagerly execute to allocate the listener closure. By using a QRL via the `$` function, Qwik can lazy load the closure only as `click` listener is triggered. ::: ###### tags: `Events`