首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何仅在点击`忘记密码`链接时使用补丁方法

如何仅在点击`忘记密码`链接时使用补丁方法
EN

Stack Overflow用户
提问于 2021-10-14 09:27:57
回答 1查看 63关注 0票数 0

我试图在单击忘记密码链接后才显示更改密码的表单。我在调用API更新用户密码时遇到问题。以下是我用来创建api、触发事件以及处理UI和应用程序的文件。如果有人能在这方面给我指点,请让我知道。

代码语言:javascript
运行
复制
<!--------Sign up------>
<section id="before-sign-in">
  <form class="border form" id="sign-up">
    <fieldset class="fieldset">
      <legend>Sign Up</legend>
      <input name="credentials[email]" type="email" placeholder="Email" required>
      <input name="credentials[password]" type="password" placeholder="Password" required>
      <input name="credentials[password_confirmation]" type="password" placeholder="Password Confirmation" required>
      <button class="btn btn-success">Sign Up</button>
    </fieldset>
  </form>

<!----------Sign In ----------->
  <form class="border form" id="sign-in">
    <fieldset class="fieldset">
      <legend>Sign In</legend>
      <input name="credentials[email]" type="email" placeholder="Email" required>
      <input name="credentials[password]" type="password" placeholder="Password" required>
      <button class="btn btn-primary"> Sign In </button>
      <p> 
      <a class="forgot-password" href>Forgot password?</a>
      </p>
    </fieldset>
  </form>
</section>

<!----ChangePassword ------>
<section class="click-forgot-password">
  <form class="changepassword" id="change-password">
    <fieldset>
      <legend>Change Password</legend>
      <input name="passwords[old]" type="password" placeholder="Old Password" required>
      <input name="passwords[new]" type="password" placeholder="New Password" required>
      <button class="btn btn-success">Change Password</button>
    </fieldset>
  </form>
</section>

/* app.js */

代码语言:javascript
运行
复制
$(() => {
  // Whenever our #sign-up form is submitted, call the `onSignUp` function
  $('#sign-up').on('submit', authEvents.onSignUp)
  $('#sign-in').on('submit', authEvents.onSignIn)
  $('#sign-out').on('click', authEvents.onSignOut)
  $('.click-forgot-password').on('click', authEvents.onChangePassword)
})

api.js

代码语言:javascript
运行
复制
/* POST request for signing up  */
const signUp =  (formData) => {
       return $.ajax({
        url:`${config.apiUrl}/sign-up`,
        method: 'POST',
        data: formData
    })
}
/* POST request for signing in */
const signIn =  (formData) => {
    //make a request to POST  /sign-up
    return $.ajax({
        url:`${config.apiUrl}/sign-in`,
        method: 'POST',
        data: formData
    })
}
/* DELETE request for signing out  */
const signOut = () => {
    return $.ajax({
        url:`${config.apiUrl}/sign-out`,
        method: 'DELETE',
        headers: {
            Authorization: 'Bearer '+ store.user.token
        }
    })
}

/* Change Password*/

//formData will be our our password object w/ old and new passwords
const changePassword = function (formData){
    return $.ajax({
        url:`${config.apiUrl}/change-password`,
        method: 'PATCH',
        data: formData,
        headers: {
            Authorization: 'Bearer '+store.user.token
        }
    })
}

events.js

代码语言:javascript
运行
复制
const api = require('./api')
// require out ui functions to update the page
const ui = require('./ui')

const onSignUp = (event) => {
    event.preventDefault() 
    const form = event.target
    const formData = getFromFields(form)
    api.signUp(formData)
        .then(ui.signUpSuccess)
        .catch(ui.signUpFailure)
}


const onSignIn = (event) =>{
    event.preventDefault()
    const form = event.target
    const formData = getFormFields(form)
    api.signIn(formData)
        .then(ui.signInSuccess)
        .catch(ui.signInFailure)
}
//no need to pass event parameter and we are not passing any data like `sign-up` or `sign in`
const onSignOut = function () {
    api.signOut()
   .then(ui.onSignOutSuccess)
   .catch(ui.onSignOutFailure)
 // export our event handler functions, so we can use them
 // in app.js
 }
 const onChangePassword = function (event) {
    event.preventDefault()
    const form = event.target
    const formData = getFormFields(form)
  
    // make a PATCH /change-password request, pass it the old and new passwords
    api.changePassword(formData)
      .then(ui.changePasswordSuccess)
      .catch(ui.changePasswordFailure)
  }

ui.js

代码语言:javascript
运行
复制
const store = require('../store')

 /* Sign in Sucess*/
const signUpSuccess = (responseData) => {
     $('#games-display').text('Signed up successfully!')
    // remove existing classes, then add a green text-success class from bootstrap
    $('#games-display').removeClass()
    $('#games-display').addClass('text-success')
    // clear (reset) all of the forms
    $('form').trigger('reset')
    console.log('responseData is', responseData)
    $('#sign-up').hide()
  }
  /* Sign up Failed*/
  const signUpFailure = ()=> {
    // message for failure
    $('#error-message').text('Sign up failed').fadeOut(5000)
  }
 /* Sign in Sucess*/
  const signInSuccess = (responseData) => {
    store.user = responseData.user
      // message for successful sign in
    $('#games-display').text('Signed in successfully!')
    $('#games-display').removeClass()
    $('#games-display').addClass('text-success').fadeOut(6000)
    $('form').trigger('reset')

    // After we sign in, hide the section with the id `before-sign-in`
   $('.form2').show()
     
    console.log('responseData is', responseData)
    $('#sign-up').hide()
    $('#sign-in').hide()
    $('#change-password').hide()
    $('.changepassword').trigger('click')
    $('.username-display').text("Signed in user: " + store.user.email)
  }
  /* Sign in Failed*/

  const signInFailure = (error) => {
    // message for failure
    $('#error-message').text('Sign in failed')
    // remove existing classes, then add a red text-danger class from bootstrap
    $('#error-message').removeClass()
    $('#error-message').addClass('text-danger').fadeOut(5000)
  
    // print the error
    console.error('error is', error)
  }
  
  /* Change password success and error handling functions */
  const changePasswordSuccess = function (responseData) {
      $('.changepassword').show()
    
    // tell the user it was successful
    $('#games-display').text('Changed password successfully!')
  
    // remove existing classes, then add a green text-success class from bootstrap
    $('#games-display').removeClass()
    $('#games-display').addClass('text-success')
  
    // clear (reset) all of the forms
    $('form').trigger('reset')
    console.log('responseData is', responseData)
  }

  const changePasswordFailure = function (error) {
    // tell the user it was failure
    $('#error-message').text('Changing passwords failed!')
  
    // remove existing classes, then add a red text-danger class from bootstrap
    $('#error-message').removeClass()
    $('#error-message').addClass('text-danger')
  
    // print the error
    console.error('error is', error)
  }
EN

回答 1

Stack Overflow用户

发布于 2021-10-14 09:45:34

您已经在HTML模板中定义了类forgot-password的忘记密码链接

代码语言:javascript
运行
复制
<a class="forgot-password" href>Forgot password?</a>

...but在app.js中,您正在将事件绑定到类click-forgot-password

代码语言:javascript
运行
复制
$('.click-forgot-password').on('click', authEvents.onChangePassword)

类名应该在HTML属性和jQuery选择器中匹配(无论您使用什么名称)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69568287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档