Rails – ERB忽略了JS / jQuery

我在下面的代码中有以下代码:

 $(document).ready(function(){ $("#button").click(function(event){ if(false) { //even with if (false), this code is still being executed!    $("#button").attr("href","/" + obj.my_path); } }); });  

正如您在注释中看到的那样,JavaScript if语句的条件为false,因此永远不应执行该块。 但由于某种原因,它就像我的JS不存在而且正在调用ERB块。 为什么会这样? JS似乎在网站上的其他页面上正常工作。

如果您需要有关此问题的更多信息以帮助解决问题,请尽量提供尽可能多的信息。

您似乎对服务器端代码和客户端代码之间的区别感到有点困惑。

ERB在服务器上执行,即客户端上的JavaScript。 当你的ERB被执行时,Ruby几乎看到了这个:

 puts '' 

再简化一点,ERB归结为这样的事情:

 puts some_strings[0] puts some_strings[1] puts some_strings[2] puts some_strings[3] if obj my_method(obj) end puts some_strings[4] puts some_strings[5] puts some_strings[6] puts some_strings[7] puts some_strings[8] 

当您打开ERB时,为什么执行my_method(obj)变得非常明显。

在ERB中,你所有的JavaScript都只是一堆未经解释的字符串:你的JavaScript只是一堆无意义的文本,直到它到达客户端浏览器。

然后,浏览器将看到如下内容:

  

您的ERB无处可见,因为它是在服务器上处理的。 但是,您的if(false)被看到并且它将由客户端解释。 但是,您的ERB已经运行,因此if(false)不会影响您的my_method(obj) Ruby调用。

ERB代码是Ruby代码,它对JavaScript一无所知,而if只是它的标记。 如果您不想执行ERB代码,请在erb代码中修复if,而不是在JavaScript上。

Interesting Posts