【问题标题】:Create jump to page from Javascript从 Javascript 创建跳转到页面
【发布时间】:2021-01-26 13:24:04
【问题描述】:

您好,请理解我们的问题,请参阅下面的脚本和 html。

我的脚本

const resultEl = document.querySelector('.allquotes');
const pageSize = document.querySelector('select[name="page-size"]');
const pageCurr = document.querySelector('input[name="page-curr"]')
const pageNoCurr = document.querySelector('.page-no-curr');
const pageNoCount = document.querySelector('.page-no-count')
const btnPrev = document.querySelector('.page-btn-prev');
const btnNext = document.querySelector('.page-btn-next');

let results = [];

const getResultCount = () => results.length;
const getPageSize = () => +pageSize.value;
const getCurrPage = () => +pageCurr.value;
const getPageCount = () => Math.ceil(getResultCount() / getPageSize());

const pageResponse = (records, pageSize, page) =>
  (start => records.slice(start, Math.min(records.length, start + pageSize)))
  (pageSize * (page - 1));

const btnJump =  document.querySelector('.jump-btn');
const pageValue =  document.querySelector('.value-page');

const main = async() => {
  btnPrev.addEventListener('click', navPrev);
  btnNext.addEventListener('click', navNext);
  btnJump.addEventListener('click', navJump);
  pageSize.addEventListener('change', changeCount);

  results = await retrieveAllQuotes();
  updatePager(results);
  redraw();
};
const redraw = () => {
  resultEl.innerHTML = '';
  const paged = pageResponse(results, getPageSize(), getCurrPage());
  const contents = document.createElement('div');
  contents.classList.add("allStatus");
  const quotes = paged.map((record) => `<div class='latestatus'><p class='copytxt'>${record.status}</p><div> <button class="copystatus btn">Copy</button><span class="status-copy-alert hidden" id="status-copy-alert">Copied!</span></div></div>`);
  const quoteGroupNumer = Math.ceil(quotes.length / 2);
  const groups = Array(quoteGroupNumer).fill('').map((value, index) => {
    const groupQuoteFirst = quotes[2 * index]; // 0, 2, 4, 6
    const groupQuoteSecond = quotes[2 * index + 1] || ''; // 1, 3, 5, 7

    return `<div class="flex">${groupQuoteFirst}${groupQuoteSecond}</div>`;
  });

  contents.innerHTML = groups.join('');
  resultEl.append(contents);
};

const navPrev = (e) => {
  const pages = getPageCount();
  const curr = getCurrPage();
  const prevPage = curr > 1 ? curr - 1 : curr;
  pageCurr.value = prevPage;
  pageNoCurr.textContent = prevPage;
  redraw();
}

const navNext = (e) => {
  const pages = getPageCount();
  const curr = getCurrPage();
  const nextPage = curr < pages ? curr + 1 : curr;
  pageCurr.value = nextPage;
  pageNoCurr.textContent = nextPage;
  redraw();
}

const navJump = (e) => {
  const pages = getPageCount();
  const curr = getCurrPage();  
  pageNoCurr.textContent = pageValue.value;
  redraw();
}

const changeCount = () => {
  updatePager();
  redraw();
};

const updatePager = () => {
  const count = getPageCount();
  const curr = getCurrPage();
  pageCurr.value = curr > count ? 1 : curr;
  pageNoCurr.textContent = curr > count ? 1 : curr;
  pageNoCount.textContent = count;
};

const retrieveAllQuotes = async function() {
  return[{
      quotes: "1The cat is better than dog."
    },
    {
      quotes: "2Google is a open source library."
    },
    {
      quotes: "3Cats are better than ferrets."
    },
    {
      quotes: "4Love books."
    },
    {
      quotes: "5Life is short make it possible."
    },
    {
      quotes: "6The cat is better than dog"
    },
    {
      quotes: "7Google is a open source library."
    },
    {
      quotes: "8Cats are better than ferrets."
    },
    {
      quotes: "9Love books."
    },
    {
      quotes: "10Life is short make it possible."
    },
]; 
}
document.querySelector('.allquotes').addEventListener(

  'click',

  function (e) {

    e.preventDefault();
    

    if (e.target && e.target.matches('.copystatus')) {

        const quote = e.target.parentNode.closest('.latestatus')

            .childNodes[0].textContent;
      
      const notify = e.target.nextSibling.closest('.status-copy-alert');
      
      notify.classList.toggle('hidden');
      setTimeout(() => {
  notify.classList.add('hidden');
}, 600);

        const textArea = document.createElement('textarea');

        textArea.value = quote;

        document.body.appendChild(textArea);

        textArea.select();

        document.execCommand('Copy');

        textArea.remove();

    }

  },

  false

);
main();

我的 HTML

<!DOCTYPE html>
<html>
<head>
    <link href="Find Stgatus/css/style.css" rel="stylesheet" />
<style>
/* Main Status */
.hidden {
  display:none;
}

.pagable {
  display: flex;
  flex-direction: column;
  border: var(--pageable-border);
  background: var(--pageable-background);
}

.pagable .pagable-results {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 0.25em;
}

.pagable .pagable-status {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  padding: 0.25em;
  background: var(--pageable-status-background);
}

.pagable .pagable-actions {
  display: grid;
  grid-auto-flow: column;
  grid-gap: 0.25em;
}
.pagable .pagable-actions input[name="page-curr"] {
  width: 3em;
}
.btn {
 display: inline-block;
 padding: 10px 20px;
 cursor: pointer;
 background: #18b495;
 color: #fff;
 border: none;
 border-radius: 30px;
}
.btn:hover {
 transform: scale(0.98);
}
.status-copy-alert {

 position: relative;

 background-color: #18b495;

 color: #ffffff;

 padding: 10px 10px;

 border-radius: 5px;

 left: 8px;

 text-transform: uppercase;

 letter-spacing: 0.05em;

 font-weight: 500;

 visibility: visible;

}

.status-copy-alert:before{

 content:"";

 position: absolute;

 height: 10px;

 width: 10px;

 background-color: #18b495;

 left: -5px;

 transform: rotate(45deg);

 top: 39%;

}

</style>
</head>
<body>
    <a href="hindinj.html">caeman</a>
<div class="mainStatus">
   <h2 class="statusHeading">Latest English Status</h2>
<div class="allquotes"></div>
<div class="pagable-status">
  <label>Page <span class="page-no-curr">1</span> of <span class="page-no-count">1</span></label>
  <div class="pagable-actions">
    <button class="page-btn-prev btn">PRE</button>
      <input type="number" name="page-curr" min="1" value="1" />
    <button class="page-btn-next btn">NEXT</button>
    
    <select name="page-size">
      <option>5</option>
      <option>10</option>
      <option>20</option>
    </select>
  </div>
 <input class="value-page"/>
<button class="jump-btn">Go</button>
</div>
</body>
</html>

你能看到 go 按钮并在其上方输入吗?任何人都可以修改上面的代码,以便如果我在输入中输入页码并单击 go 按钮,它应该跳转到那里。

我是这个 Javascript 部分的新手,不知道这个领域,所以如果你回答它会对我有很大帮助。

提前致谢

【问题讨论】:

    标签: javascript html pagination


    【解决方案1】:

    使用addEventListener 使button 更改.page-no-curr 的页码值。

    const resultEl = document.querySelector('.allquotes');
    const pageSize = document.querySelector('select[name="page-size"]');
    const pageCurr = document.querySelector('input[name="page-curr"]')
    const pageNoCurr = document.querySelector('.page-no-curr');
    const pageNoCount = document.querySelector('.page-no-count')
    const btnPrev = document.querySelector('.page-btn-prev');
    const btnNext = document.querySelector('.page-btn-next');
    
    let results = [];
    
    const getResultCount = () => results.length;
    const getPageSize = () => +pageSize.value;
    const getCurrPage = () => +pageCurr.value;
    const getPageCount = () => Math.ceil(getResultCount() / getPageSize());
    
    const pageResponse = (records, pageSize, page) =>
      (start => records.slice(start, Math.min(records.length, start + pageSize)))
      (pageSize * (page - 1));
    
    const btnJump =  document.querySelector('.jump-btn');
    const pageValue =  document.querySelector('.value-page');
    
    const main = async() => {
      btnPrev.addEventListener('click', navPrev);
      btnNext.addEventListener('click', navNext);
      btnJump.addEventListener('click', navJump);
      pageSize.addEventListener('change', changeCount);
    
      results = await retrieveAllQuotes();
      updatePager(results);
      redraw();
    };
    const redraw = () => {
      resultEl.innerHTML = '';
      const paged = pageResponse(results, getPageSize(), getCurrPage());
      const contents = document.createElement('div');
      contents.classList.add("allStatus");
      const quotes = paged.map((record) => `<div class='latestatus'><p class='copytxt'>${record.status}</p><div> <button class="copystatus btn">Copy</button><span class="status-copy-alert hidden" id="status-copy-alert">Copied!</span></div></div>`);
      const quoteGroupNumer = Math.ceil(quotes.length / 2);
      const groups = Array(quoteGroupNumer).fill('').map((value, index) => {
        const groupQuoteFirst = quotes[2 * index]; // 0, 2, 4, 6
        const groupQuoteSecond = quotes[2 * index + 1] || ''; // 1, 3, 5, 7
    
        return `<div class="flex">${groupQuoteFirst}${groupQuoteSecond}</div>`;
      });
    
      contents.innerHTML = groups.join('');
      resultEl.append(contents);
    };
    
    const navPrev = (e) => {
      const pages = getPageCount();
      const curr = getCurrPage();
      const prevPage = curr > 1 ? curr - 1 : curr;
      pageCurr.value = prevPage;
      pageNoCurr.textContent = prevPage;
      redraw();
    }
    
    const navNext = (e) => {
      const pages = getPageCount();
      const curr = getCurrPage();
      const nextPage = curr < pages ? curr + 1 : curr;
      pageCurr.value = nextPage;
      pageNoCurr.textContent = nextPage;
      redraw();
    }
    
    const navJump = (e) => {
      const pages = getPageCount();
      const curr = getCurrPage();  
      pageCurr.value = pageValue.value;
      pageNoCurr.textContent = pageValue.value;
      redraw();
    }
    
    const changeCount = () => {
      updatePager();
      redraw();
    };
    
    const updatePager = () => {
      const count = getPageCount();
      const curr = getCurrPage();
      pageCurr.value = curr > count ? 1 : curr;
      pageNoCurr.textContent = curr > count ? 1 : curr;
      pageNoCount.textContent = count;
    };
    
    const retrieveAllQuotes = async function() {
      return[{
          quotes: "1The cat is better than dog."
        },
        {
          quotes: "2Google is a open source library."
        },
        {
          quotes: "3Cats are better than ferrets."
        },
        {
          quotes: "4Love books."
        },
        {
          quotes: "5Life is short make it possible."
        },
        {
          quotes: "6The cat is better than dog"
        },
        {
          quotes: "7Google is a open source library."
        },
        {
          quotes: "8Cats are better than ferrets."
        },
        {
          quotes: "9Love books."
        },
        {
          quotes: "10Life is short make it possible."
        },
    ]; 
    }
    document.querySelector('.allquotes').addEventListener(
    
      'click',
    
      function (e) {
    
        e.preventDefault();
        
    
        if (e.target && e.target.matches('.copystatus')) {
    
            const quote = e.target.parentNode.closest('.latestatus')
    
                .childNodes[0].textContent;
          
          const notify = e.target.nextSibling.closest('.status-copy-alert');
          
          notify.classList.toggle('hidden');
          setTimeout(() => {
      notify.classList.add('hidden');
    }, 600);
    
            const textArea = document.createElement('textarea');
    
            textArea.value = quote;
    
            document.body.appendChild(textArea);
    
            textArea.select();
    
            document.execCommand('Copy');
    
            textArea.remove();
    
        }
    
      },
    
      false
    
    );
    main();
    <!DOCTYPE html>
    <html>
    <head>
        <link href="Find Stgatus/css/style.css" rel="stylesheet" />
    <style>
    /* Main Status */
    .hidden {
      display:none;
    }
    
    .pagable {
      display: flex;
      flex-direction: column;
      border: var(--pageable-border);
      background: var(--pageable-background);
    }
    
    .pagable .pagable-results {
      display: flex;
      flex-direction: column;
      flex: 1;
      padding: 0.25em;
    }
    
    .pagable .pagable-status {
      display: flex;
      flex-direction: row;
      justify-content: space-between;
      padding: 0.25em;
      background: var(--pageable-status-background);
    }
    
    .pagable .pagable-actions {
      display: grid;
      grid-auto-flow: column;
      grid-gap: 0.25em;
    }
    .pagable .pagable-actions input[name="page-curr"] {
      width: 3em;
    }
    .btn {
     display: inline-block;
     padding: 10px 20px;
     cursor: pointer;
     background: #18b495;
     color: #fff;
     border: none;
     border-radius: 30px;
    }
    .btn:hover {
     transform: scale(0.98);
    }
    .status-copy-alert {
    
     position: relative;
    
     background-color: #18b495;
    
     color: #ffffff;
    
     padding: 10px 10px;
    
     border-radius: 5px;
    
     left: 8px;
    
     text-transform: uppercase;
    
     letter-spacing: 0.05em;
    
     font-weight: 500;
    
     visibility: visible;
    
    }
    
    .status-copy-alert:before{
    
     content:"";
    
     position: absolute;
    
     height: 10px;
    
     width: 10px;
    
     background-color: #18b495;
    
     left: -5px;
    
     transform: rotate(45deg);
    
     top: 39%;
    
    }
    
    </style>
    </head>
    <body>
        <a href="hindinj.html">caeman</a>
    <div class="mainStatus">
       <h2 class="statusHeading">Latest English Status</h2>
    <div class="allquotes"></div>
    <div class="pagable-status">
      <label>Page <span class="page-no-curr">1</span> of <span class="page-no-count">1</span></label>
      <div class="pagable-actions">
        <button class="page-btn-prev btn">PRE</button>
          <input type="number" name="page-curr" min="1" value="1" />
        <button class="page-btn-next btn">NEXT</button>
        
        <select name="page-size">
          <option>5</option>
          <option>10</option>
          <option>20</option>
        </select>
      </div>
     <input class="value-page"/>
    <button class="jump-btn">Go</button>
    </div>
    </body>
    </html>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2010-10-01
      • 2015-06-30
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多