Javascript "if statement"和嵌入式 ruby​​(ruby 变量始终为 true)

标签 javascript ruby-on-rails ruby conditional-statements

我的 html.erb 中有这样的脚本:

if(browser == "Firefox") {
  $(".browser-warning").show();
}

else if(browser == "Safari") {
  if(browser.version < 6) {
    $(".browser-warning").show();
  }
}

else if((BrowserDetect.browser != "Chrome") && (<%= params[:section_id].to_s %> != '')) {
  console.log('yo');
  <%= session[:is_chrome] = false %>
  <%= Rails.logger.debug = "I made is_chrome false, wtf?" %>
}

else {
  $(".browser-warning").show();
}

我从 Chrome 浏览器运行此脚本,条件返回false

但是 session[:is_chrome] 总是变为 false 并且 Rails 记录器返回“我将 is_chrome 设置为 false,wtf?”。 但。 JS 控制台记录器不会在控制台中打印“yo”。 为什么会这样?仅当 JS“if”语句为 true 时定义 session 值的正确方法是什么?

谢谢大家。

最佳答案

在服务器上渲染模板时,每个 ruby​​ 代码片段都会被评估。
因此,这些行也会在服务器上执行(每次,不仅是在不是 chrome 浏览器时):

<%= session[:is_chrome] = false %>
<%= Rails.logger.debug = "I made is_chrome false, wtf?" %>

要解决此问题,您可以执行以下操作之一:

  • 检查服务器是否是 Chrome 浏览器并进行必要的操作 变化
  • 检查客户端是否是 chrome 浏览器并创建 ajax 调用服务器告知有 chrome(或非 chrome) 浏览器


另外放<%= params[:section_id].to_s %>在引号中(正如用户“infused”也指出的那样):

"<%= params[:section_id].to_s %>"

关于Javascript "if statement"和嵌入式 ruby​​(ruby 变量始终为 true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535261/

相关文章:

ruby-on-rails - 比较 Ruby on Rails 中的时间和日期时间?

ruby - 我如何在 ruby​​ mongo 中进行 OR 查询?

javascript - 如何注册在 Google Analytic 中被点击的按钮?

ruby-on-rails - Raphael 中的 SVG 文件,可以使用吗?

javascript - 为什么 <select> 标签的 "drop-down"部分不受 CSS 2D 转换的影响?

ruby-on-rails - Rails 3 date_select仅适用于年份

javascript - 从 javascript onclick 发出 ajax 请求

ruby-on-rails - 如何在 heroku 上配置 mongoid 1.9.2?

php - 从 jQuery ajax 调用复制数组

javascript - 如何使用按钮从一个组件调用另一个组件的函数