Rails-jQuery 为什么我必须单击两次才能显示 jQuery 效果

Rails-jQuery Why do I have to click twice for jQuery effect to show?

本文关键字:两次 显示 效果 jQuery 为什么 单击 Rails-jQuery      更新时间:2023-09-26

我正在使用 Rails 4.1.1 为什么我必须单击两次才能显示 jQuery 效果?我一直在谷歌搜索,但我找不到任何解决方案,不确定我的jQuery代码是否有问题,或者......

当我第一次单击"提交"时,效果没有出现,但已经调用了POST操作,当我第二次单击时,效果出现了并调用了POST操作。

请在下面查看我的create.js.erbusers_controller.rbnew.html.erb

创建.js.erb

function isValidEmailAddress(emailAddress) {
  var pattern = new RegExp(/^((([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+('.([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+)*)|(('x22)(((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?((['x01-'x08'x0b'x0c'x0e-'x1f'x7f]|'x21|['x23-'x5b]|['x5d-'x7e]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(''(['x01-'x09'x0b'x0c'x0d-'x7f]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]))))*((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?('x22)))@((([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.)+(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.?$/i);
  return pattern.test(emailAddress);
};
$("form").submit(function( event ) {
  var email = $("input#user_email").val();
if (email == "") {
$("h1").text( "Email cannot be empty" ).show().fadeOut( 3000 );
return;
} else if (!isValidEmailAddress(email)) {
$("h1").text( "Email address is not valid" ).show().fadeOut( 3000 );
}else {
  $("h1").text( "Correct email address" ).show();
}
event.preventDefault();
});

新.html.erb

<%= form_for @user, remote: true do |f| %>
  <p>
    <%= f.text_field :email %>
  </p>
  <p>
    <%= f.submit :Submit %>
  </p>
<% end %>
<h1></h1>
  <% @users.each do |user| %>
    <tr>
      <li><%= user.email %></li>
    </tr>
  <% end %>

users_controller.rb

class UsersController < ApplicationController
  def new
    @users = User.all
    @user = User.new
  end
  def create
    @user = User.new(user_params)
    respond_to do |format|
      format.html { redirect_to '/' }
      format.js
      end   
    @user.save
  end
private
  def user_params
    params.require(:user).permit(:email)
  end
end

涡轮链接可能会导致此问题 - 尝试在您的应用程序中禁用涡轮链接,这对我有用 过去当我遇到过类似的问题时

你弄错了。当您在 Rails 中提交远程表单时,应用程序会向create操作发送 AJAX 请求,然后从您的create.js.erb中获取收到的 js 代码。因此,第一次单击按钮时,没有任何反应。

js 视图不是处理验证的地方,您应该将其放在assets/javascripts中的某个位置。js 视图是使用表单更新页面的 html 视图的地方(例如,将记录添加到列表、显示收到的错误、重置表单)。