IBM Worklight - jQuery 无法识别 html 页面上的任何元素

Posted

技术标签:

【中文标题】IBM Worklight - jQuery 无法识别 html 页面上的任何元素【英文标题】:IBM Worklight - jQuery not recognizing any element on html page 【发布时间】:2014-01-05 18:22:50 【问题描述】:

我一直试图在 html 页面中单击按钮时调用一个函数,但不知何故,正在调用 .js 文件中定义的函数,但我无法对 HTML 页面中定义的任何元素执行工作。 jQuery 没有访问我的任何元素。我尝试阅读很多内容并尝试不同的组合,但似乎没有任何效果。

我创建了一个名为“Hello”的新 IBM Worklight 项目。因此,当我在Hello.html 中添加上述 HTML 内容并在Hello.js 中添加上述 JS 代码时,代码运行良好。但是当我在同一个项目中创建一个新的UI.htmlcontrol.js 并且如上所述的相应内容时,代码不起作用......

这是我的 HTML 代码:

<body>
    <div id="AppBody">
        <div id="header">
             <h1>UI Controls</h1>

        </div>
        <div id="wrapper">
            <input type="button" id='SimpleDialogStartButton' value="SimpleDialog" onclick="w()" />
            <input type="button" id='BusyIndicatorStartButton' value="BusyIndicator for 5 seconds" onclick="w()" />
            <br />
        </div>
    </div>
    <script src="js/control.js"></script>
</body>

这是我的control.js

    var busyIndicator = null;

    function w() 
       // alert("bvgb");
        busyIndicator = new WL.BusyIndicator(
            text: "LOADING..."
        , 
            color: "RED"
        );
        $('#SimpleDialogStartButton').click(simpleDialogDemo);
        $('#BusyIndicatorStartButton').click(busyIndicatorDemo);
    
    function busyIndicatorDemo() 
        alert("fdsddsds");
        busyIndicator.show();
        setTimeout(function () 
            busyIndicator.hide();
        , 5000);
    
    function simpleDialogDemo() 
        var dialogTitle = "CommonControls";
        var dialogText = "This is simple dialog text";
        WL.SimpleDialog.show(dialogTitle, dialogText, [
            text: 'I am button 1',
            handler: simpleDialogButton1Click
        , 
            text: 'I am button 2',
            handler: simpleDialogButton2Click
            
function simpleDialogButton1Click() 
alert("simpleDialogButton1 Clicked");



function simpleDialogButton2Click() 
alert("simpleDialogButton2 Clicked");

即使我尝试在上面的函数 w() 中添加这一行

 $("#p1").css("border","3px solid red");

 <p id='p1'>kjbdsds</p> 

在我的 HTML 代码中,仍然没有任何效果。

【问题讨论】:

这些方法是否在 document.ready 中被调用?? 否,但如果我在 w() 函数中取消注释 alert(""),则会调用 alert,但其余代码似乎不起作用 你应该在 document.ready 中调用这些,因为只有这样 dom 元素肯定存在,然后你才能访问它们。您是否收到任何控制台错误?您在哪里调用 w()? 如果你创建了一个 jsFiddle 会很有帮助 我在按钮单击 SimpleDialogStartButton 和 BusyIndi​​catorStart 按钮时调用 w() 并且 $document.ready 也不起作用。当我将此代码与名为 Hello 的 ibm worklight 项目的主 html 和 js 文件一起使用时,上面的代码工作得非常好,即当我在 Hello.html nd hello.js 中编写内容时,这工作正常,但如果我是创建一个新的 Html 和 js 文件代码不起作用 【参考方案1】:

IMO,您需要停下来做所有事情,然后完成 IBM Worklight 为您提供的培训模块:http://www.ibm.com/developerworks/mobile/worklight/getting-started.html

这样您就会明白Worklight 是一个单页应用程序。您不能简单地在应用程序中包含更多 HTML 文件并期望它们能够正常工作。

此外,正如您所提到的,jQuery (v1.9.1) 与 Worklight 捆绑在一起。您在主 HTML 和 JS 文件(在 Worklight Studio 中创建新项目和应用程序时自动生成的文件)中正确执行的任何操作都将有效。


当您创建一个 new HTML 文件并将其应用到问题中提到的这些更改时 - 它不起作用,因为其中没有引用 jQuery 或 Worklight 框架文件,所以它只是一些单独的 HTML 文件,没有连接到任何东西。

例如,如果您要从应用程序的主 HTML 文件加载这个新的 HTML 文件,您将丢失 Worklight 上下文并且应用程序将停止工作

您的 Worklight 应用程序中的 HTML 文件不能超过 1 个。

但是!如果您要做的是创建具有多个页面的应用程序,那么我再次建议您查看文档,因为也有专门的培训模块(见下文) .

培训模块:http://www.ibm.com/developerworks/mobile/worklight/getting-started.html

Building a multi-page application Working with UI frameworks

【讨论】:

+1 我说实话stop everything you are doing, and then you need to study the training modules 您是否刚刚删除了此处的其他答案,包括其下的所有 cmets?那是糟糕的形式。仅仅因为那个答案/cmets 是错误的,并不意味着你可以随意删除它们。如果我有足够的声誉,我会否决你的回答。 @trysis,删除其他人的答案?我不是这个网站的版主,所以我不能这样做,但如果你愿意,请继续投票。 o_O 好的,谢谢你,虽然我只关注这个网站,但我会在通过这个之后回来,但也许我跳过了一些重要的点 即使我也没有删除任何人的答案

以上是关于IBM Worklight - jQuery 无法识别 html 页面上的任何元素的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight 6.0.0.1 - jQuery 调色板不显示

jQuery (IBM Worklight) 页面导航和后退按钮

IBM Worklight 6.0 - 富页面编辑器不加载 jQuery Mobile CSS

IBM Worklight 6.0 - 默认情况下是不是包含 jQuery Mobile?

IBM Worklight:无法在 Worklight Console 中上载适配器

IBM Worklight 6.0 - 无法访问 Worklight 服务器