是这样的:
<form ...... onsubmit="return check()">
....
</form>
<script type="text/javascript">
function check(){
alert("!!!!!!!!!!");
}
</script>
传统的使用js,上面是没问题的,会弹出提示 “!!!!!!!!!”
但是用了seajs后
define(function (require, exports, module) {
function check(){
alert("!!!!!!!!!!");
}
});
这时候确不能触发check,我哪个地方没遵守规则嘛?
8 回复
理论上是这么用的,但还是推荐使用绑定的形式在模块中添加事件。
<button onclick="seajs.use('./test', function(test){ test.check(); });">Check</button>
<script>
define('./test', function(require, exports, module){
exports.check = function(){
console.log(true);
};
});
</script>
恩,使用模块,在check .js中写验证逻辑
seajs.use(“/scripts/user/check.js”);
你的意思是html里不做任何函数的调用,只在check.js这个模块里绑定事件 那绑定事件,可以给表单form绑定一个事件嘛,怎么个绑定法呢
如果这样用的话,算是违背了seajs的初衷。 seajs其中一项作用是减少全局变量。
你只有
window.check = function (){
alert("!!!!!!!!!!");
}
才能生效,不过这样跟楼上说的意思大致,建议你仔细浏览一下seajs的官网。
做一个简单的例子,目录结构大概是这样的:
|- js | |- app | | |- login.js | |- vendor | |- sea.js |- index.html
index.html
<form action="http://url" method="post" id="loginForm">
<input type="text" name="user" placeholder="用户名/邮箱"/>
<input type="text" name="pass" placeholder="密码"/>
<button id="submit" type="submit">登录</button>
</form>
<script src="js/vendor/sea.js"></script>
<script>
seajs.config({
base: './js/'
});
seajs.use('app/login');
</script>
app/login.js
define('app/login', function(require, exports, module){
var loginForm = document.getElementById('loginForm');
loginForm.onsubmit = function(){
// this is form[id="loginForm"]
if ( this.user.value == '' || this.pass.value == '' ) {
alert('用户名和密码不能为空');
return false;
} else {
return true;
}
};
// 或者可以这么写,
var submit = document.getElementById('submit');
submit.onclick = function(event){
if ( loginForm.user.value == '' || loginForm.pass.value == '' ) {
alert('用户名和密码不能为空');
event.preventDefault();
} else {
loginForm.submit();
}
}
});