如何在Grails中重用外部javascript文件
How to reuse external javascript files in Grails?
我创建了一个简单的javascript文件,并将其放在web-app/js中,并将其命名为util.js
它包含以下代码:
$(document).ready(function() {
// adds a space after 3rd digit/letter of postal code
$('#postalCode').keyup(function() {
var postalCodeValue = this.value;
var postalCodeLength = postalCodeValue.length;
if(postalCodeLength == 3){
this.value = postalCodeValue + " ";
}
});
});
这是非常简单的代码,我将其附加到main.gsp上,这样我就不必每次都继续导入它。
...
<div class="footer" role="contentinfo"></div>
<div id="spinner" class="spinner" style="display:none;">
<g:message code="spinner.alt" default="Loading…" /></div>
<g:javascript library="application" />
<g:javascript library="util" />
<r:layoutResources />
...
现在,有两种形式使用它(Form1 和 Form2)。它们属于不同的 gsp 文件。Form1 和 Form2 都有一个具有相同 ID "#postalCode" 的文本字段。
<g:textField name="postalCode" maxlength="7" id="postalCode" pattern="([A-Z]|[a-z])[0-9]([A-Z]|[a-z]) [0-9]([A-Z]|[a-z])[0-9]" required="" value="${fosterHomeInstance?.postalCode}"/>
问题是,util.js 适用于 Form1,但奇怪的是,它不适用于 Form2。鉴于它们具有相同的 id,并将代码<g:javascript library="util" />
放在 main.gsp 中,那么理论上,它们应该可以正常工作吗?嗯。。这很奇怪。我右键单击 Form2 以查看源代码,util.js 当然在那里。我真的想不出它不应该工作的原因。我希望它适用于两种形式,因为我不想重新编写相同的代码。
PS:我尝试将 id 更改为类 = "邮政编码"并更改了 $('#postalCode')...到 $('.postalCode'),但仍然不起作用。我还在邮政编码文本字段上添加了一个 onClick 触发器,单击时会出现警报(其代码来自 util.js)以测试是否正在读取 util.js,它有效,但它仍然没有解决问题。我很困惑。我可以简单地将其重写为 onKeyUp 并添加一个旧的 javascript 风格的函数,但我可能在这里遗漏了一些东西,所以我想先听听你们的意见。:'(
我建议在整个主要JavaScript函数中的位置添加console.log("描述性文本")以进行调试。这将允许你在JavaScript停止工作之前看到你在JavaScript上走了多远。很可能某些 JavaScript 正在按您的预期执行,但其他部分却没有。例如
$(document).ready(function() {
console.log("Document is ready");
$('#postalCode').keyup(function(){
console.log("Keyup function started.");
var postalCodeValue = this.value;
var postalCodeLength = postalCodeValue.length;
console.log("Postal Code Value is: " + postalCodeValue);
console.log("Postal Code Length is: " + postalCodeLength);
if(postalCodeLength == 3){
console.log("The postal code length is exactly 3.");
this.value = postalCodeValue + " "
}
}); });
值得注意的是,Internet Explorer 默认情况下没有打开控制台,因此您需要在发布网站以供公众使用之前删除这些行,或者检查浏览器并将控制台定义为其他浏览器(如果浏览器是 IE)。
您可以使用 CTRL+SHIFT+J 在 Chrome 中打开 JS 控制台。有关打开它的其他方法,请参阅 https://webmasters.stackexchange.com/questions/8525/how-to-open-the-javascript-console-in-different-browsers。
- 使用html中的外部javascript进行数据验证
- 将变量传递给外部Javascript
- 关于引入外部javascript文件的问题&css通过https
- 有没有办法在tinymceiframe中加载一个外部javascript文件
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- HTML外部javascript加载另一个javascript
- 如何在定义js文件后为外部javascript文件设置变量
- ResolveUrl没有'我似乎不适合当链接到具有动态虚拟目录的外部javascript文件时
- 如何在小部件中添加外部javascript库和样式表
- 外部JavaScript验证不起作用
- Chrome扩展无法通过清单加载外部javascript
- 动态虚拟目录和外部 JavaScript 链接
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- 如何从窗体调用外部javascript方法
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 如何使用Java在WebDriver中调用外部JavaScript
- 从Haml调用外部javascript中的ruby数组
- 在选择更改时更改从外部javascript生成的flash播放器
- 缓存javascript失败,因为使用了外部javascript
- 在AngularJS中手动加载和卸载外部javascript