JavaScript
នាំឱ្យ Bootstrap មានជីវិតជាមួយនឹងកម្មវិធីជំនួយ JavaScript ជាជម្រើសរបស់យើង។ ស្វែងយល់អំពីកម្មវិធីជំនួយនីមួយៗ ទិន្នន័យរបស់យើង និងជម្រើស API កម្មវិធី និងច្រើនទៀត។
បុគ្គល ឬចងក្រង
កម្មវិធីជំនួយអាចត្រូវបានរួមបញ្ចូលជាលក្ខណៈបុគ្គល (ដោយប្រើបុគ្គលរបស់ Bootstrap js/dist/*.js
) ឬទាំងអស់នៅពេលតែមួយដោយប្រើ bootstrap.js
ឬបង្រួម bootstrap.min.js
(មិនរួមបញ្ចូលទាំងពីរ)។
ប្រសិនបើអ្នកប្រើកញ្ចប់ឯកសារ (Webpack, Parcel, Vite…) អ្នកអាចប្រើ /js/dist/*.js
ឯកសារដែល UMD រួចរាល់។
ការប្រើប្រាស់ជាមួយក្របខ័ណ្ឌ JavaScript
ខណៈពេលដែល Bootstrap CSS អាចត្រូវបានប្រើជាមួយក្របខ័ណ្ឌណាមួយ Bootstrap JavaScript គឺមិនឆបគ្នាពេញលេញជាមួយ JavaScript frameworks ដូចជា React, Vue និង Angular ដែលសន្មត់ថាមានចំណេះដឹងពេញលេញអំពី DOM នោះទេ។ ទាំង Bootstrap និងក្របខ័ណ្ឌអាចព្យាយាមផ្លាស់ប្តូរធាតុ DOM ដូចគ្នាដែលបណ្តាលឱ្យមានកំហុសដូចជាការទម្លាក់ចុះដែលត្រូវបានជាប់គាំងនៅក្នុងទីតាំង "បើក" ។
ជម្រើសដ៏ល្អសម្រាប់អ្នកដែលប្រើប្រភេទនៃក្របខ័ណ្ឌនេះគឺត្រូវប្រើកញ្ចប់ជាក់លាក់នៃក្របខ័ណ្ឌ ជំនួសឱ្យ Bootstrap JavaScript ។ នេះគឺជាជម្រើសពេញនិយមបំផុតមួយចំនួន៖
- ប្រតិកម្ម៖ ប្រតិកម្ម Bootstrap
- Vue៖ BootstrapVue (បច្ចុប្បន្នគាំទ្រតែ Vue 2 និង Bootstrap 4)
- Angular: ng-bootstrap
ការប្រើប្រាស់ Bootstrap ជាម៉ូឌុល
យើងផ្តល់កំណែនៃ Bootstrap ដែលបានបង្កើតជា ESM
( bootstrap.esm.js
និង bootstrap.esm.min.js
) ដែលអនុញ្ញាតឱ្យអ្នកប្រើ Bootstrap ជាម៉ូឌុលនៅក្នុងកម្មវិធីរុករក ប្រសិនបើ កម្មវិធីរុករកគោលដៅរបស់អ្នកគាំទ្រវា ។
<script type="module">
import { Toast } from 'bootstrap.esm.min.js'
Array.from(document.querySelectorAll('.toast'))
.forEach(toastNode => new Toast(toastNode))
</script>
បើប្រៀបធៀបទៅនឹង JS bundler ការប្រើ ESM នៅក្នុងកម្មវិធីរុករកតម្រូវឱ្យអ្នកប្រើផ្លូវពេញលេញ និងឈ្មោះឯកសារជំនួសឱ្យឈ្មោះម៉ូឌុល។ អានបន្ថែមអំពីម៉ូឌុល JS នៅក្នុងកម្មវិធីរុករក។ នោះហើយជាមូលហេតុដែលយើងប្រើ 'bootstrap.esm.min.js'
ជំនួសឱ្យ 'bootstrap'
ខាងលើ។ ទោះយ៉ាងណាក៏ដោយ វាមានភាពស្មុគស្មាញបន្ថែមទៀតដោយការពឹងផ្អែក Popper របស់យើង ដែលនាំចូល Popper ចូលទៅក្នុង JavaScript របស់យើងដូចនេះ៖
import * as Popper from "@popperjs/core"
ប្រសិនបើអ្នកសាកល្បងប្រើវា អ្នកនឹងឃើញកំហុសនៅក្នុងកុងសូលដូចខាងក្រោម៖
Uncaught TypeError: Failed to resolve module specifier "@popperjs/core". Relative references must start with either "/", "./", or "../".
ដើម្បីជួសជុលវា អ្នកអាចប្រើ importmap
ដើម្បីដោះស្រាយឈ្មោះម៉ូឌុលដែលបំពានដើម្បីបញ្ចប់ផ្លូវ។ ប្រសិនបើ កម្មវិធីរុករកតាម អ៊ីនធឺណិតគោលដៅ របស់អ្នក មិនគាំទ្រ importmap
អ្នកនឹងត្រូវប្រើគម្រោង es-module-shims ។ នេះជារបៀបដែលវាដំណើរការសម្រាប់ Bootstrap និង Popper៖
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
<title>Hello, modularity!</title>
</head>
<body>
<h1>Hello, modularity!</h1>
<button id="popoverButton" type="button" class="btn btn-primary btn-lg" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="ESM in Browser" data-bs-content="Bang!">Custom popover</button>
<script async src="https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.min.js" crossorigin="anonymous"></script>
<script type="importmap">
{
"imports": {
"@popperjs/core": "https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js",
"bootstrap": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.esm.min.js"
}
}
</script>
<script type="module">
import * as bootstrap from 'bootstrap'
new bootstrap.Popover(document.getElementById('popoverButton'))
</script>
</body>
</html>
ភាពអាស្រ័យ
កម្មវិធីជំនួយ និងសមាសធាតុ CSS មួយចំនួនអាស្រ័យលើកម្មវិធីជំនួយផ្សេងទៀត។ ប្រសិនបើអ្នករួមបញ្ចូលកម្មវិធីជំនួយដាច់ដោយឡែក ត្រូវប្រាកដថាពិនិត្យមើលភាពអាស្រ័យទាំងនេះនៅក្នុងឯកសារ។
ការទម្លាក់ចុះ ការលេចឡើង និងព័ត៌មានជំនួយរបស់យើងក៏អាស្រ័យលើ Popper ផងដែរ។
គុណលក្ខណៈទិន្នន័យ
កម្មវិធីជំនួយ Bootstrap ស្ទើរតែទាំងអស់អាចត្រូវបានបើក និងកំណត់រចនាសម្ព័ន្ធតាមរយៈ HTML តែម្នាក់ឯងជាមួយនឹងគុណលក្ខណៈទិន្នន័យ (វិធីដែលយើងពេញចិត្តក្នុងការប្រើមុខងារ JavaScript)។ ត្រូវប្រាកដថា ប្រើតែសំណុំនៃគុណលក្ខណៈទិន្នន័យនៅលើធាតុតែមួយ (ឧទាហរណ៍ អ្នកមិនអាចកេះព័ត៌មានជំនួយ និងម៉ូឌុលពីប៊ូតុងតែមួយបានទេ។)
ដោយសារជម្រើសអាចត្រូវបានឆ្លងកាត់តាមគុណលក្ខណៈទិន្នន័យ ឬ JavaScript អ្នកអាចបន្ថែមឈ្មោះជម្រើសទៅ data-bs-
ដូចក្នុង data-bs-animation="{value}"
. ត្រូវប្រាកដថាផ្លាស់ប្តូរប្រភេទករណីនៃឈ្មោះជម្រើសពី " camelCase " ទៅ " kebab-case " នៅពេលឆ្លងកាត់ជម្រើសតាមរយៈគុណលក្ខណៈទិន្នន័យ។ ឧទាហរណ៍ ប្រើ data-bs-custom-class="beautifier"
ជំនួស data-bs-customClass="beautifier"
.
ចាប់ពី Bootstrap 5.2.0 សមាសធាតុទាំងអស់គាំទ្រ គុណលក្ខណៈទិន្នន័យដែលបានបម្រុងទុក ដោយពិសោធន៍data-bs-config
ដែលអាចដាក់ការកំណត់រចនាសម្ព័ន្ធសមាសធាតុសាមញ្ញជាខ្សែអក្សរ JSON ។ នៅពេលដែលធាតុមាន data-bs-config='{"delay":0, "title":123}'
និង data-bs-title="456"
គុណលក្ខណៈ តម្លៃចុងក្រោយ title
នឹងជា 456
ហើយគុណលក្ខណៈទិន្នន័យដាច់ដោយឡែកនឹងបដិសេធតម្លៃដែលបានផ្តល់ឱ្យនៅលើ data-bs-config
. លើសពីនេះ គុណលក្ខណៈទិន្នន័យដែលមានស្រាប់អាចដាក់តម្លៃ JSON ដូចជា data-bs-delay='{"show":0,"hide":150}'
.
អ្នកជ្រើសរើស
យើងប្រើប្រភពដើម querySelector
និង querySelectorAll
វិធីសាស្រ្តដើម្បីសួរធាតុ DOM សម្រាប់ហេតុផលដំណើរការ ដូច្នេះអ្នកត្រូវតែប្រើ ឧបករណ៍ជ្រើសរើសត្រឹមត្រូវ ។ ប្រសិនបើអ្នកប្រើឧបករណ៍ជ្រើសរើសពិសេស collapse:Example
ត្រូវប្រាកដថាគេចចេញពីពួកវា។
ព្រឹត្តិការណ៍
Bootstrap ផ្តល់នូវព្រឹត្តិការណ៍ផ្ទាល់ខ្លួនសម្រាប់សកម្មភាពពិសេសៗរបស់កម្មវិធីជំនួយភាគច្រើន។ ជាទូទៅ ទាំងនេះមកក្នុងទម្រង់ចូលរួមគ្មានកំណត់ និងអតីតកាល ដែលអកំណត់ (ឧ។ show
) ត្រូវបានបង្កឡើងនៅពេលចាប់ផ្តើមព្រឹត្តិការណ៍ ហើយទម្រង់ចូលរួមអតីតកាលរបស់វា (ឧ. shown
) ត្រូវបានបង្កឡើងនៅពេលបញ្ចប់សកម្មភាព។
ព្រឹត្តិការណ៍គ្មានកំណត់ទាំងអស់ផ្តល់នូវ preventDefault()
មុខងារ។ វាផ្តល់នូវសមត្ថភាពក្នុងការបញ្ឈប់ការប្រតិបត្តិនៃសកម្មភាពមុនពេលវាចាប់ផ្តើម។ ការត្រឡប់មិនពិតពីកម្មវិធីដោះស្រាយព្រឹត្តិការណ៍នឹងហៅដោយស្វ័យប្រវត្តិផងដែរ preventDefault()
។
const myModal = document.querySelector('#myModal')
myModal.addEventListener('show.bs.modal', event => {
if (!data) {
return event.preventDefault() // stops modal from being shown
}
})
API កម្មវិធី
អ្នកសាងសង់ទាំងអស់ទទួលយកវត្ថុជម្រើសស្រេចចិត្ត ឬគ្មានអ្វីសោះ (ដែលផ្តួចផ្តើមកម្មវិធីជំនួយជាមួយនឹងឥរិយាបថលំនាំដើមរបស់វា)៖
const myModalEl = document.querySelector('#myModal')
const modal = new bootstrap.Modal(myModalEl) // initialized with defaults
const configObject = { keyboard: false }
const modal1 = new bootstrap.Modal(myModalEl, configObject) // initialized with no keyboard
ប្រសិនបើអ្នកចង់ទទួលបានឧទាហរណ៍កម្មវិធីជំនួយជាក់លាក់មួយ កម្មវិធីជំនួយនីមួយៗបង្ហាញ getInstance
វិធីសាស្ត្រមួយ។ ឧទាហរណ៍ ដើម្បីទាញយកវត្ថុដោយផ្ទាល់ពីធាតុមួយ៖
bootstrap.Popover.getInstance(myPopoverEl)
វិធីសាស្ត្រនេះនឹងត្រឡប់ null
ប្រសិនបើឧទាហរណ៍មិនត្រូវបានផ្តួចផ្តើមលើធាតុដែលបានស្នើសុំ។
ម៉្យាងទៀត getOrCreateInstance
អាចត្រូវបានប្រើដើម្បីយកវត្ថុដែលភ្ជាប់ជាមួយធាតុ DOM ឬបង្កើតថ្មីមួយ ក្នុងករណីដែលវាមិនត្រូវបានចាប់ផ្តើម។
bootstrap.Popover.getOrCreateInstance(myPopoverEl, configObject)
ក្នុងករណីដែលវត្ថុមិនត្រូវបានគេចាប់ផ្តើម វាអាចទទួលយក និងប្រើវត្ថុកំណត់រចនាសម្ព័ន្ធស្រេចចិត្តជាអាគុយម៉ង់ទីពីរ។
ឧបករណ៍ជ្រើសរើស CSS នៅក្នុងអ្នកសាងសង់
បន្ថែមពីលើ getInstance
និង getOrCreateInstance
វិធីសាស្រ្ត អ្នកបង្កើតកម្មវិធីជំនួយទាំងអស់អាចទទួលយកធាតុ DOM ឬ ឧបករណ៍ជ្រើសរើស CSS ដែលមានសុពលភាព ជាអាគុយម៉ង់ដំបូង។ ធាតុកម្មវិធីជំនួយត្រូវបានរកឃើញជាមួយ querySelector
វិធីសាស្ត្រ ដោយសារកម្មវិធីជំនួយរបស់យើងគាំទ្រតែធាតុតែមួយ
const modal = new bootstrap.Modal('#myModal')
const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
const offcanvas = bootstrap.Offcanvas.getInstance('#myOffcanvas')
const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')
មុខងារ និងការផ្លាស់ប្តូរអសមកាល
វិធីសាស្ត្រ API កម្មវិធីទាំងអស់គឺ អសមកាល ហើយត្រលប់ទៅអ្នកហៅវិញនៅពេលដែលការផ្លាស់ប្តូរត្រូវបានចាប់ផ្តើម ប៉ុន្តែ មុនពេលវាបញ្ចប់ ។ ដើម្បីប្រតិបត្តិសកម្មភាពនៅពេលការផ្លាស់ប្តូរត្រូវបានបញ្ចប់ អ្នកអាចស្តាប់ព្រឹត្តិការណ៍ដែលទាក់ទងគ្នា។
const myCollapseEl = document.querySelector('#myCollapse')
myCollapseEl.addEventListener('shown.bs.collapse', event => {
// Action to execute once the collapsible area is expanded
})
លើសពីនេះទៀត ការហៅតាមវិធីសាស្ត្រលើ សមាសភាគអន្តរកាលនឹងត្រូវបានមិនអើពើ ។
const myCarouselEl = document.querySelector('#myCarousel')
const carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance
myCarouselEl.addEventListener('slid.bs.carousel', event => {
carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})
carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
dispose
វិធីសាស្រ្ត
ខណៈពេលដែលវាហាក់ដូចជាត្រឹមត្រូវក្នុងការប្រើ dispose
វិធីសាស្ត្រភ្លាមៗបន្ទាប់ពី hide()
នោះ វានឹងនាំទៅរកលទ្ធផលមិនត្រឹមត្រូវ។ នេះជាឧទាហរណ៍នៃបញ្ហាក្នុងការប្រើប្រាស់៖
const myModal = document.querySelector('#myModal')
myModal.hide() // it is asynchronous
myModal.addEventListener('shown.bs.hidden', event => {
myModal.dispose()
})
កំណត់លំនាំដើម
អ្នកអាចផ្លាស់ប្តូរការកំណត់លំនាំដើមសម្រាប់កម្មវិធីជំនួយដោយកែប្រែ Constructor.Default
វត្ថុរបស់កម្មវិធីជំនួយ៖
// changes default for the modal plugin's `keyboard` option to false
bootstrap.Modal.Default.keyboard = false
វិធីសាស្រ្តនិងលក្ខណៈសម្បត្តិ
រាល់កម្មវិធីជំនួយ Bootstrap បង្ហាញវិធីសាស្ត្រខាងក្រោម និងលក្ខណៈសម្បត្តិឋិតិវន្ត។
វិធីសាស្រ្ត | ការពិពណ៌នា |
---|---|
dispose |
បំផ្លាញម៉ូឌុលនៃធាតុមួយ។ (លុបទិន្នន័យដែលបានរក្សាទុកនៅលើធាតុ DOM) |
getInstance |
វិធីសាស្ត្រ ឋិតិវន្ត ដែលអនុញ្ញាតឱ្យអ្នកទទួលបានគំរូម៉ូឌុលដែលភ្ជាប់ជាមួយធាតុ DOM ។ |
getOrCreateInstance |
វិធីសាស្ត្រ ឋិតិវន្ត ដែលអនុញ្ញាតឱ្យអ្នកទទួលបានគំរូម៉ូឌុលដែលភ្ជាប់ជាមួយធាតុ DOM ឬបង្កើតថ្មីមួយក្នុងករណីដែលវាមិនត្រូវបានចាប់ផ្តើម។ |
ទ្រព្យសម្បត្តិឋិតិវន្ត | ការពិពណ៌នា |
---|---|
NAME |
ត្រឡប់ឈ្មោះកម្មវិធីជំនួយ។ (ឧទាហរណ៍៖ bootstrap.Tooltip.NAME ) |
VERSION |
កំណែនៃកម្មវិធីជំនួយរបស់ Bootstrap នីមួយៗអាចចូលប្រើបានតាមរយៈ VERSION លក្ខណសម្បត្តិរបស់អ្នកបង្កើតកម្មវិធីជំនួយ (ឧទាហរណ៍៖ bootstrap.Tooltip.VERSION ) |
ទឹកអនាម័យ
ព័ត៌មានជំនួយ និង Popovers ប្រើប្រាស់ឧបករណ៍អនាម័យដែលភ្ជាប់មកជាមួយរបស់យើង ដើម្បីធ្វើអនាម័យជម្រើសដែលទទួលយក HTML ។
តម្លៃ លំនាំដើម allowList
មានដូចខាងក្រោម៖
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
const DefaultAllowlist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
ប្រសិនបើអ្នកចង់បន្ថែមតម្លៃថ្មីទៅលំនាំដើមនេះ allowList
អ្នកអាចធ្វើដូចខាងក្រោម៖
const myDefaultAllowList = bootstrap.Tooltip.Default.allowList
// To allow table elements
myDefaultAllowList.table = []
// To allow td elements and data-bs-option attributes on td elements
myDefaultAllowList.td = ['data-bs-option']
// You can push your custom regex to validate your attributes.
// Be careful about your regular expressions being too lax
const myCustomRegex = /^data-my-app-[\w-]+/
myDefaultAllowList['*'].push(myCustomRegex)
ប្រសិនបើអ្នកចង់រំលងឧបករណ៍អនាម័យរបស់យើង ដោយសារអ្នកចូលចិត្តប្រើបណ្ណាល័យដែលមានការយកចិត្តទុកដាក់ ឧទាហរណ៍ DOMPurify អ្នកគួរធ្វើដូចខាងក្រោម៖
const yourTooltipEl = document.querySelector('#yourTooltip')
const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
sanitizeFn(content) {
return DOMPurify.sanitize(content)
}
})
ជាជម្រើសដោយប្រើ jQuery
អ្នកមិនត្រូវការ jQuery នៅក្នុង Bootstrap 5 ទេ ប៉ុន្តែវានៅតែអាចប្រើសមាសធាតុរបស់យើងជាមួយ jQuery បាន។ ប្រសិនបើ Bootstrap រកឃើញ jQuery
នៅក្នុង window
វត្ថុ វានឹងបន្ថែមសមាសធាតុរបស់យើងទាំងអស់នៅក្នុងប្រព័ន្ធកម្មវិធីជំនួយរបស់ jQuery ។ នេះអនុញ្ញាតឱ្យអ្នកធ្វើដូចខាងក្រោមៈ
$('[data-bs-toggle="tooltip"]').tooltip() // to enable tooltips, with default configuration
$('[data-bs-toggle="tooltip"]').tooltip({ boundary: 'clippingParents', customClass: 'myClass' }) // to initialize tooltips with given configuration
$('#myTooltip').tooltip('show') // to trigger `show` method
ដូចគ្នាទៅនឹងសមាសធាតុផ្សេងទៀតរបស់យើង។
គ្មានជម្លោះ
ពេលខ្លះចាំបាច់ត្រូវប្រើកម្មវិធីជំនួយ Bootstrap ជាមួយនឹងក្របខ័ណ្ឌ UI ផ្សេងទៀត។ ក្នុងកាលៈទេសៈទាំងនេះ ការប៉ះទង្គិចឈ្មោះចន្លោះអាចកើតឡើងម្តងម្កាល។ ប្រសិនបើរឿងនេះកើតឡើង អ្នកអាចហៅ .noConflict
ទៅកម្មវិធីជំនួយដែលអ្នកចង់ត្រឡប់តម្លៃនៃ
const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
Bootstrap មិនគាំទ្រជាផ្លូវការនូវបណ្ណាល័យ JavaScript ភាគីទីបីដូចជា Prototype ឬ jQuery UI ទេ។ ទោះបីជា .noConflict
និងព្រឹត្តិការណ៍ដាក់ឈ្មោះក៏ដោយ វាអាចមានបញ្ហាភាពឆបគ្នាដែលអ្នកត្រូវជួសជុលដោយខ្លួនឯង។
ព្រឹត្តិការណ៍ jQuery
Bootstrap នឹងរកឃើញ jQuery ប្រសិនបើ jQuery
មានវត្តមាននៅក្នុង window
វត្ថុ ហើយមិនមាន data-bs-no-jquery
គុណលក្ខណៈកំណត់នៅលើ <body>
. ប្រសិនបើ jQuery ត្រូវបានរកឃើញ Bootstrap នឹងបញ្ចេញព្រឹត្តិការណ៍អរគុណចំពោះប្រព័ន្ធព្រឹត្តិការណ៍របស់ jQuery ។ ដូច្នេះប្រសិនបើអ្នកចង់ស្តាប់ព្រឹត្តិការណ៍របស់ Bootstrap អ្នកនឹងត្រូវប្រើវិធី jQuery ( .on
, .one
) ជំនួសឱ្យ addEventListener
.
$('#myTab a').on('shown.bs.tab', () => {
// do something...
})
បានបិទ JavaScript
កម្មវិធីជំនួយរបស់ Bootstrap មិនមានជម្រើសពិសេសនៅពេលដែល JavaScript ត្រូវបានបិទ។ ប្រសិនបើអ្នកខ្វល់ពីបទពិសោធន៍អ្នកប្រើប្រាស់ក្នុងករណីនេះ សូមប្រើ <noscript>
ដើម្បីពន្យល់ពីស្ថានភាព (និងរបៀបបើក JavaScript ឡើងវិញ) ដល់អ្នកប្រើប្រាស់របស់អ្នក និង/ឬបន្ថែមការបដិសេធផ្ទាល់ខ្លួនរបស់អ្នក។