如同道场1.7>不提供OnLoad状态处理,一些不错的功能,如Jquery中的OnLoad并不真正支持Dojo。 Dojo有类似功能,如ready或DomReady接近OnLoad,让我们一起来看看。
我需要在加载的页面上检查一些dojo表单字段。这些字段主要用于保存浏览器geoLocation信息以方便用户查找本地商户信息,我需要一个OnLoad函数来检查浏览器是否支持geoLocation,如果是,dojo脚本会将用户浏览器的经纬度信息填充到dojo表单中其他方面,我需要启用其他字段,如邮政编码,以更改为" required"要求用户提供他当地的邮政编码。
我的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');
}
假设这个函数将在DOM上加载,但它永远不能正常工作。 criteria_postcode字段永远不会在页面中设置为必需。
我还尝试使用dojo脚本测试提交事件函数,我的代码如下:
partial
这段dojo脚本将打印出一个控制台日志,等待用户点击ok确认后再提交给服务器。
不幸的是,firefox工作但不适用于safari,safari在提交后打印出控制台日志,是真的吗?我很困惑。
答案 0 :(得分:0)
domReady是正确的方法,但不是在提交时间,而是在加载时执行。
还定义了所有函数,然后运行navigator.geolocation
更好:
<script type="text/javascript">
require(["dojo/dom","dojo/dom-attr","dojo/domReady!"], function(dom,domAttr){
var Geo = {};
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);
}
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(success, error);
}else{
}
});
</script>
在提交时,您显然不需要使用dojo/domReady!
(DOM已准备好,否则用户无法提交)