【问题标题】:How do I create a jQuery Mobile button from javascript?如何从 javascript 创建一个 jQuery Mobile 按钮?
【发布时间】:2012-08-16 08:30:17
【问题描述】:

有没有办法让 jQuery Mobile 将 javascript 生成的链接呈现为按钮小部件,就像它在加载页面时自动执行的那样?

我有这样的javascript来动态创建链接:

var ws=document.getElementById('workspace'); // empty <div id="workspace"></div>
ws.innerHTML='<a id="myb" href="foo.php" data-role="button">baz</a>';

当然它只生成一个普通链接而不是一个按钮,所以我的问题是我如何让 jQueryMobile 动态创建按钮,如果相同的 &lt;a id="myb" href="foo.php" data-role="button"&gt;baz&lt;/a&gt; 从一开始就出现在页面中就会这样做?

编辑:

这样的脚本:

$('#tagspace').html('<a id="myb" data-inline="true" data-ajax="false"
                    href="boo.php" data-role="button">baz</a>')
              .button()
              .click(function() { window.location.href=this.href;});

是一种改进。 确实会生成一个按钮(整个页面宽度),并且该按钮对标签文本之外的点击很敏感。但是,this 似乎没有映射到包含预期链接“目标”的元素。

这个的DOM结果:

<div aria-disabled="false" class="ui-btn ui-shadow ui-btn-corner-all ui-fullsize
                                      ui-btn-block ui-btn-up-c" data-mini="false" data-inline="false" data-theme="c" data-iconpos="" data-icon="" data-wrapperels="span" data-iconshadow="true" data-shadow="true" data-corners="true"> <span class="ui-btn-inner ui-btn-corner-all">
        <span class="ui-btn-text">baz</span>
</span>
    <div aria-disabled="false" class="ui-btn-hidden" id="tagspace"> <a id="myb" data-inline="true" data-ajax="false" href="boo.php" data-role="button">baz</a>

    </div>
</div>

所以,还是不是同一种按钮。

【问题讨论】:

  • 你为什么不用jquery mobile
  • @al0neevenings,你建议我用 jquery mobile 怎么做?
  • @Matt,thisclick 处理程序中映射到什么?
  • @FrédéricHamidi,我不知道this 是什么,但它似乎没有href 属性,因为单击按钮的敏感部分会导致“未定义",这不是预期的页面。当然我可以将它设置为真实的URL而不是点击功能中的this.href,但它仍然不是同一种按钮。太大,文本所在的位置无法点击。

标签: javascript dom jquery-mobile


【解决方案1】:

您可以通过将元素包装在 jQuery 对象中并调用 button() 方法来创建按钮小部件。

$("#workspace").html("<a id='myb' href='foo.php' data-role='button'>baz</a>")
               .button();

更新:按钮小部件会阻止链接的默认行为,因此如果您希望恢复该行为,则必须添加 click 处理程序:

$("#workspace").html("<a id='myb' href='foo.php' data-role='button'>baz</a>")
               .button()
               .click(function() {
                   window.location.href = this.href;
               });

【讨论】:

  • 谢谢!正是我正在寻找的答案!顺便说一句,您是否有理由在属性值周围使用单引号而不是相反?
  • @Matt,这是个人喜好。我最常使用的两种语言都在句子中使用单引号,因此我更喜欢在字符串周围使用双引号。你可以放心地忽略它:)
  • 啊,那是因为变成按钮的链接没有导航到它们原来的href。这是设计使然。我会用解决方法更新我的答案。
  • 接受这个,因为它是唯一的答案并且足够接近。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多