开发者问题收集

获取 typeerror 函数不存在错误

2016-06-10
267

注意事项:
我无法访问 HTML(由引擎呈现)
引擎中包含 jQuery(这就是我不将其包含在我的代码中的原因)

此代码获取链接并将其注入 html:

$(document).ready(function(){
    addSS('https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css'); 
    addScript('https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js');
    addScript('//InjectedHTML.js');
});

function addScript(str){
    var script = document.createElement('script');
    script.src = str;
    document.head.appendChild(script);
};

function addSS(str){
    var link = document.createElement('link');
    link.rel= 'stylesheet';
    link.href = str;
    link.type= 'text/css';
    document.head.appendChild(link);
};

InjectedHTML 将 datepicker 放入 HTML(与上述代码位于不同的文件中):

$(document).ready(function() {
    addClass();                         //adds class attribute to an input that allows me to use datepicker function
    datePicker();                       //adds calendar
});
function addClass(){
    $("#DateWrapper input").attr("class", "datepicker");
};

function datePicker(){
    $( ".datepicker" ).datepicker();
};

出现此错误:
InjectedHTML.js:35 Uncaught TypeError:$(...).datepicker 不是函数

感谢您的帮助!

1个回答

我已经有几年没有关注过手动将脚本加载到 DOM 中的情况了,但通常有一个 loaded 事件的变体,该事件在脚本实际完成加载时触发。

通常,该过程有一些异步性,因为它必须去获取文件。这意味着他们可能不会在发生这种情况时停止 javascript 引擎的执行。这意味着以某种方式您正在查看回调。

有各种库可以执行此操作。如果您不想使用它们,请阅读源代码并调查目标平台的要求。

类似这样的内容:

看起来 jquery 甚至有这样的某种形式: https://api.jquery.com/jquery.getscript/

Josh
2016-06-10