PageSourceSearch

https://www.best-selection.co.jp/wp-content/themes/best-selection-…?ver=1755677008&fver=20250820080328

js best-selection.co.jp collected 2026-10-04 13:58:09 UTC 1,870 bytes, 45 lines download raw bytes

1/* inquiry.js ─ 入力→確認の手前で必須/一致を画面内で案内 */
2document.addEventListener('DOMContentLoaded', function () {
3  const form = document.getElementById('bsInquiryForm');
4  if (!form) return;
5
6  const required = form.querySelectorAll('[required]');
7  const email    = form.querySelector('input[name="email"]');
8  const email2   = form.querySelector('input[name="email_confirm"]');
9  const privacy  = document.getElementById('privacyCheck');
10
11  function rowOf(el){ return el.closest('.form-row') || el.closest('.privacy-check'); }
12  function showErr(el, msg){
13    const row = rowOf(el); if(!row) return;
14    row.classList.add('has-error');
15    let p = row.querySelector('.error-message');
16    if(!p){ p = document.createElement('p'); p.className='error-message'; row.appendChild(p); }
17    p.textContent = msg || '入力してください';
18  }
19  function clearErr(el){
20    const row = rowOf(el); if(!row) return;
21    row.classList.remove('has-error');
22    const p = row.querySelector('.error-message'); if(p) p.textContent = '';
23  }
24
25  function validate(){
26    let ok = true;
27    required.forEach(el => {
28      const empty = (el.type === 'checkbox') ? !el.checked : !el.value.trim();
29      if(empty){ ok=false; showErr(el); } else { clearErr(el); }
30    });
31    if (email.value && email2.value && email.value !== email2.value){
32      ok=false; showErr(email2, 'メールアドレスが一致しません');
33    }
34    return ok;
35  }
36
37  required.forEach(el => el.addEventListener('input', () => clearErr(el)));
38  privacy?.addEventListener('change', () => clearErr(privacy));
39
40  form.addEventListener('submit', function(e){
41    if(form.dataset.validated === '1') return;
42    e.preventDefault(); e.stopImmediatePropagation();
43    if (validate()){ form.dataset.validated='1'; form.submit(); }
44  });
45});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.