【发布时间】:2015-08-04 02:25:45
【问题描述】:
由于 dojo 1.7> 不提供 OnLoad 状态处理,一些不错的功能,例如 Jquery 中的 OnLoad,Dojo 并不真正支持。 Dojo 有类似的功能比如ready 或者DomReady 接近OnLoad,让我们看看吧。
我需要在加载的页面上检查一些 dojo 表单字段。这些字段主要用于保存浏览器的geoLocation信息,方便用户查找本地业务信息,我需要一个OnLoad函数来检查浏览器是否支持geoLocation,如果支持,dojo脚本会将用户浏览器的经纬度信息填充到dojo表单中字段,否则,我需要启用其他字段(例如邮政编码)以将其更改为“必需”以要求用户提供他的本地邮政编码。
我的道场脚本如下:
<script type="text/javascript">
require(["dojo/ready","dojo/dom","dojo/dom-attr"], function(ready,dom,domAttr){
ready(function(){
var Geo = {};
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(success, error);
}else{
}
function success(position) {
Geo.lat = position.coords.latitude;
Geo.lng = position.coords.longitude;
populateHeader(Geo.lat, Geo.lng);
}
function error() {
console.log("Geocoder failed");
domAttr.set(dom.byId("criteria_postcode"),"required",true);
}
function populateHeader(lat, lng) {
dom.byId("criteria_latitude").value=Number(lat);
dom.byId("criteria_longitude").value=Number(lng);
}
});
});
</script>
这个函数应该可以在 DOM 上加载,但它永远无法正常工作。页面中的criteria_postcode 字段永远不会设置为必填。
我还尝试使用dojo脚本测试提交事件功能,我的代码如下:
<script type="dojo/on" data-dojo-event="submit">
if(this.validate()){
require(["dijit/focus", "dojo/dom", "dojo/domReady!"], function(focusUtil,dom){
// fetch a node by id="someNode"
var pcnode = dom.byId("criteria_postcode");
var latnode = dom.byId("criteria_latitude");
var lngnode = dom.byId("criteria_longitude");
console.log(pcnode.value+"|"+latnode.value+"|"+lngnode.value);
});
return confirm('Form is valid, press OK to submit');
}
这段dojo脚本会打印出控制台日志,等待用户点击ok确认后再提交到服务器。
不幸的是,firefox 可以工作但不能用于 safari,safari 在提交后会打印出控制台日志,这是真的吗?我很困惑。
【问题讨论】:
标签: javascript jquery firefox safari dojo