Safari和Firefox在dojo就绪功能上有不同的行为

时间:2015-08-04 02:25:46

标签: javascript jquery firefox safari dojo

如同道场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在提交后打印出控制台日志,是真的吗?我很困惑。

1 个答案:

答案 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已准备好,否则用户无法提交)