> ## Documentation Index
> Fetch the complete documentation index at: https://docs.landerlab.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 JavaScript 自定义你的漏斗

> 借助测验 API 和事件 API，使用 JavaScript 自定义 LanderLab 漏斗，控制逻辑、跟踪交互并打造高级用户体验。

了解如何使用自定义 JavaScript 扩展 LanderLab 漏斗，实现更高级的用法。

LanderLab 让你无需编写代码即可搭建漏斗，但当你需要对行为、逻辑或集成进行更多控制时，也可以添加自定义 JavaScript。

<Frame>
  <img src="https://mintcdn.com/landerlab-babdc23f/nZqgRHMCi_31GFLg/images/Group-84.png?fit=max&auto=format&n=nZqgRHMCi_31GFLg&q=85&s=e7c6ab3b85d75c1fd0c588c24baab516" alt="测验设置中的自定义 JS 代码编辑区" width="1920" height="991" data-path="images/Group-84.png" />
</Frame>

## 工作原理

测验加载时，LanderLab 会初始化漏斗，并通过事件对外提供其功能。

你可以监听这些事件，在漏斗中发生特定情况时运行你自己的 JavaScript，例如测验开始、某个步骤被查看或测验被提交时。

## 使用 API

LanderLab 提供两个主要的自定义 API：

* [**测验 API**](/zh/features/quizzes/api/reference) – 用于与测验交互（获取/设置值、在步骤间导航、访问区块）
* [**事件 API**](/zh/features/quizzes/api/events) – 用于监听漏斗中发生的操作（初始化、步骤查看、提交、点击）

你可以将二者结合使用，构建自定义功能。

## 访问测验 API

测验 API 可在事件中使用。

```text theme={null}
window.addEventListener('ll-quiz-init', (event) => {
  const llQuizApi = event.detail.llQuizApi;

  // 在这里编写你的代码
});
```

## 示例：在测验加载时运行代码

```text theme={null}
window.addEventListener('ll-quiz-init', (event) => {
  const { quizId } = event.detail;

  console.log('Quiz loaded:', quizId);
});
```

## 示例：更新字段值

```text theme={null}
window.addEventListener('ll-quiz-init', (event) => {
  const { llQuizApi } = event.detail;

  const block = llQuizApi.getBlockByName('email');

  if (block) {
    block.setValue('test@example.com');
  }
});
```

## 示例：在步骤之间导航

```text theme={null}
window.addEventListener('ll-quiz-button-click', async (event) => {
  const { llQuizApi, blockName } = event.detail;

  if (blockName === 'next-btn') {
    await llQuizApi.navigation.goToStep('step-2');
  }
});
```

## 示例：监听提交

```text theme={null}
window.addEventListener('ll-quiz-submit', (event) => {
  const { fieldsSimple } = event.detail;

  console.log('Submitted data:', fieldsSimple);
});
```

## 可用事件

你可以监听多种事件，例如：

* `ll-quiz-init`
* `ll-quiz-step-view`
* `ll-quiz-step-leave`
* `ll-quiz-button-click`
* `ll-quiz-input-click`
* `ll-quiz-submit`

## 何时使用自定义 JavaScript

当你需要以下功能时，可以使用自定义 JavaScript：

* 自定义逻辑或条件
* 与外部工具集成
* 高级跟踪
* 动态更新字段
* 自定义导航


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.