当函数包含在自调用函数中时,某些函数不会被调用

时间:2017-01-12 05:54:12

标签: javascript html dom

我正在为我的项目使用javascript,同时我定义了一些javascript函数,但是当我通过DOMMonster验证函数时,它给出了一个提示,即有太多的全局函数声明。

为了克服这一点,我将我的函数包含在一个自调用函数中,通过该函数我可以删除函数的全局特性。但是,在OnChange事件上调用的2个函数没有启动。有人可以建议我如何让它在同一个内部工作。

CODE

(function(){
    function createHiddenDateField(elementName) {
        // format is DD/MM/YYYY
        var finalDate = document.getElementById(elementName + '-DD').value + '/' + document.getElementById(elementName + '-MM').value + '/' + document.getElementById(elementName + '-YYYY').value;
        document.getElementById(elementName).value = finalDate;
        if(elementName=="securityQuestionAnswerDate"){
            document.getElementById("securityQuestionAnswerDate").onchange();
        }
        return finalDate;
    }
})();

CALLER:

<select id="dateofbirth-DD" class="form_field date_field_select 
                    " onchange="createHiddenDateField('dateofbirth')">
                    <option value="">DD</option>
                    <option value="01">01
                    </option>
                    <option value="02">02
                    </option>
                    <option value="03">03
                    </option>
                    <option value="04">04
                    </option>
                    <option value="05">05
                    </option>
                    <option value="06">06
                    </option>
                    <option value="07">07
                    </option>
                    <option value="08">08
                    </option>
                    <option value="09">09
                    </option>
                    <option value="10">10
                    </option>
                    <option value="11">11
                    </option>
                    <option value="12">12
                    </option>
                    <option value="13">13
                    </option>
                    <option value="14">14
                    </option>
                    <option value="15">15
                    </option>
                    <option value="16">16
                    </option>
                    <option value="17">17
                    </option>
                    <option value="18">18
                    </option>
                    <option value="19">19
                    </option>
                    <option value="20">20
                    </option>
                    <option value="21">21
                    </option>
                    <option value="22">22
                    </option>
                    <option value="23">23
                    </option>
                    <option value="24">24
                    </option>
                    <option value="25">25
                    </option>
                    <option value="26">26
                    </option>
                    <option value="27">27
                    </option>
                    <option value="28">28
                    </option>
                    <option value="29">29
                    </option>
                    <option value="30">30
                    </option>
                    <option value="31">31
                    </option>
                </select>

2 个答案:

答案 0 :(得分:0)

  

但是,在OnChange事件上调用的2个函数没有启动

onxyz属性连接的函数必须是全局变量。这是不使用onxyz - 属性样式事件处理程序的众多原因之一,因为全局变量是Bad Thing™。

相反,使用现代事件处理来连接处理程序,例如:

document.getElementById("dateofbirth-DD").addEventListener(
    "click",
    function() {
        createHiddenDateField('dateofbirth');
    },
    false
);

如果您必须支持不支持addEventListener的过时浏览器,请参阅this answer以获取为您处理这些浏览器的功能。

答案 1 :(得分:-1)

尝试使用get()来执行此操作,并可能使用jquery或angularjs之类的东西 你可以节省时间! http://www.w3schools.com/jsref/jsref_getdate.asp