JavaScript代码内联工作,但src = reference不能

时间:2010-12-02 19:33:39

标签: javascript

我有一个javascript函数一直让我疯狂。这是该问题的最新变化。如果我在表单结束后将代码放入行中(即在标记之后,代码工作正常;但如果我将代码放入脚本引用,则会加载但不执行。

这有效:

    

<script type="text/javascript">
    var matchFieldName = 'dotmatch';
    var resultFieldName = 'dotnumber';
    var lookupURL = "/AutoSuggestJSTest/AutoSuggest.asmx/DOTFind";
    var labelFieldName = "JobTitle";
    var valueFieldName = "DOTNumber";
    $('#' + matchFieldName).autocomplete({
        source: function(request, response) {
            $.ajax({
                type: "POST",
                url: lookupURL,
                contentType: 'application/json',
                dataType: "json",
                data: JSON.stringify({ prefixText: request.term, count: 20 }),
                success: function(data) {
                    var output = jQuery.parseJSON(data.d);
                    //                        var output = eval(data.d);
                    response($.map(output, function(item) {
                        var lbl = "item." + labelFieldName + " (item." + valueFieldName + ")";
                        var val = "item." + valueFieldName;
                        return {
                            //                                label: lbl,
                            //                                value: val
                            //                                label: eval('item.' + lableFieldName + '(item.' + valueFieldName + ')'),
                            //                                value: eval('item.' + valueFieldName)
                            label: item.JobTitle + "( " + item.DOTNumber + ")",
                            value: item.DOTNumber
                        }
                    }));
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });
        },
        minLength: 2,
        select: function(event, ui) {
            $('#' + resultFieldName).val(ui.item.value);
            return ui.item.label;
        }
    });
</script>

</div>

但这不是:

</form>
    <div>

<script type="text/javascript" src="js/DOTAutocomplete.js" />

    </div>
</body>

.js文件的唯一内容是有效的行。

哎呀!!!

4 个答案:

答案 0 :(得分:9)

自动关闭<script>代码无效,<:p>

<script type="text/javascript" src="js/DOTAutocomplete.js" />

应该是:

<script type="text/javascript" src="js/DOTAutocomplete.js"></script>

另请注意,由于您使用的是选择器$('#' + matchFieldName),因此该文件应该在该元素出现后包含,或者将您的代码包装在document.ready处理程序中,例如:

$(function() {
  //your code...
});

答案 1 :(得分:1)

您可能无法正确定位文件。你正在使用type =“text / javascript”,对吧?如果它在内联工作但不是src引用,那几乎可以肯定你没有指明文件的路径。

答案 2 :(得分:0)

尝试此操作,将此代码放回外部文件中,确保每个Nick的帖子都有一个有效的脚本包含标记。

$(function(){
    var matchFieldName = 'dotmatch'; 
    var resultFieldName = 'dotnumber'; 
    var lookupURL = "/AutoSuggestJSTest/AutoSuggest.asmx/DOTFind"; 
    var labelFieldName = "JobTitle"; 
    var valueFieldName = "DOTNumber"; 
    $('#' + matchFieldName).autocomplete({ 
        source: function(request, response) { 
            $.ajax({ 
                type: "POST", 
                url: lookupURL, 
                contentType: 'application/json', 
                dataType: "json", 
                data: JSON.stringify({ prefixText: request.term, count: 20 }), 
                success: function(data) { 
                    var output = jQuery.parseJSON(data.d); 
                    //                        var output = eval(data.d); 
                    response($.map(output, function(item) { 
                        var lbl = "item." + labelFieldName + " (item." + valueFieldName + ")"; 
                        var val = "item." + valueFieldName; 
                        return { 
                            //                                label: lbl, 
                            //                                value: val 
                            //                                label: eval('item.' + lableFieldName + '(item.' + valueFieldName + ')'), 
                            //                                value: eval('item.' + valueFieldName) 
                            label: item.JobTitle + "( " + item.DOTNumber + ")", 
                            value: item.DOTNumber 
                        } 
                    })); 
                }, 
                error: function(XMLHttpRequest, textStatus, errorThrown) { 
                    alert(textStatus); 
                } 
            }); 
        }, 
        minLength: 2, 
        select: function(event, ui) { 
            $('#' + resultFieldName).val(ui.item.value); 
            return ui.item.label; 
        } 
    }); 
}); 

答案 3 :(得分:0)

如上面Craver先生所述,自动关闭Javascript标签并不好。以下是对原因的讨论:

Why don't self-closing script tags work?

没有令人满意的理由 - 只是因为SCRIPT标签没有在规范中标记为具有EMPTY的内容模型 - 可能是因为稍后添加了src属性。