【问题标题】:Difference between button onclick and a href按钮 onclick 和 href 的区别
【发布时间】:2016-03-01 04:05:19
【问题描述】:

我正在尝试将 SendOwl 购物车集成到我的应用程序中(应用程序的详细信息在最后)。

为了演示这个问题,我使用纯 HTML / Javascript 创建了一个简单的 sn-p。在 HTML 的头部,我有这个:

<script type="text/javascript">
    function SendOwl(url) {                 
        window.location.href=url;
    }
</script>
<script type="text/javascript" src="https://transactions.sendowl.com/assets/sendowl.js" ></script>

在我的身体里有这个:

示例 1:在自己的窗口中打开结帐表单(不良行为):

<input type="button" onclick="SendOwl('https://transactions.sendowl.com/products/8/5C080C0F/purchase');" value="On Click" />

屏幕截图 1:请注意 URL 已更改,它不是叠加层(与 2 相比)。

示例 2:在模式窗口中打开结帐表单作为覆盖(期望行为):

<a href='https://transactions.sendowl.com/products/8/5C080C0F/purchase'>a href</a>

屏幕截图 2:URL 保持不变,但表单以叠加方式打开。

您还可以在 SendOwl 的演示页面上查看现场演示。

我的应用程序基于 GWT(准确地说是 SmartGWT)。在我的应用程序中,我调用按钮 onclick 处理程序来调用 Javascript,该 Javascript 使用 JSNI 调用来调用 Buy Now 链接(如下所示)。但“立即购买”链接始终以完整窗口打开,如上面的示例 1。

public static native void onBuyNowClick(String url) /*-{
  $wnd.SendOwl(url);
}-*/;

我尝试过$wnd.open(url),但行为相同。

如何让第一个示例的行为与第二个示例一样但仍使用按钮 onclick?

更新:

神奇之处在于 sendowl.js 脚本。如果我删除该脚本,那么两个示例的工作方式相同。如果我能弄清楚该脚本是如何工作的,它可能会提供一些线索,让示例 1 以与示例 2 相同的方式工作。

谢谢。

【问题讨论】:

  • 要在新窗口中打开经典href,您可以使用target= "_blank"
  • 这不是这里的问题。我知道如何在新窗口中打开链接。 href 示例(#2)是所需的行为。要求是留在同一个窗口中,并在当前窗口的叠加层中显示结帐表单。如果我可能要求您前往 SendOwl 演示页面 (sendowl.com/demo) 并单击信用卡演示按钮以查看它是如何工作的。希望这会使要求更加明确。
  • 我添加了答案,可能对你有帮助
  • 等等,我会编辑我的答案
  • 大家好!我只想问,GWT现在怎么样了?我可以使用它开始一个新项目,否则它会被弃用吗?

标签: javascript gwt smartgwt jsni


【解决方案1】:

我自己通过探索 sendowl.js 解决了这个问题。这就是发挥所有魔力的脚本。

这是我修改后的脚本,它使示例 1 的工作方式与示例 2 完全相同:

<script>
    function SendOwl(url) { 
        sendOwl.addLoadingImage();
        sendOwl.loadIframe ('https://transactions.sendowl.com/products/8/5C080C0F/purchase');
    }
</script>
<script src="https://transactions.sendowl.com/assets/sendowl.js"></script>  

感谢所有回复并尝试提供帮助的人。

【讨论】:

    【解决方案2】:

    你只需要:

    <script type="text/javascript" src="https://transactions.sendowl.com/assets/sendowl.js" ></script>
    <a href="https://transactions.sendowl.com/products/8/5C080C0F/purchase" rel="nofollow"><input type="button" value="Purchase" /></a>
    

    https://help.sendowl.com/help/article/link/button-codes-to-sell-your-product

    对我来说很好。

    【讨论】:

    • 其实我已经尝试过这种方法。没什么区别。该表单仅显示在同一个窗口中,但不像示例 2 中那样显示为覆盖,也显示在我在上面的 cmets 中链接到的 sendowl 演示页面上。我将添加几个屏幕截图来显示问题。不过感谢您的帮助。
    • @DFB 想通了,我现在就发布答案
    • 我检查了你的 jsfiddle,我认为你仍然没有得到问题。 a href 示例在没有 rel="nofollow" 和 target="_blank" 的情况下工作正常。我在问为什么 onclick(示例 1)的工作方式不同。我需要在我的应用程序中使用按钮 onclick。我不能在那里使用 。希望现在更清楚了。
    • rel='nofollow' 据我所知与这个问题无关。但是感谢您的帮助。
    • @DFB 我给你发个截图,在 jsfiddle 上不行
    【解决方案3】:

    在 GWT 中,您可以使用 PopupPanel 来显示覆盖。就个人而言,我从未尝试在弹出窗口中嵌入页面,但您可以尝试在弹出面板中添加 Frame 对象,如下所示:

    PopupPanel popup = new PopupPanel();
    Frame frame = new Frame("http://www.yourlink.com/");
    popup.setWidget(frame);
    popup.setGlassEnabled(true);
    popup.center();
    

    网址请查看documentationthread

    【讨论】:

    • 谢谢。实际上我已经在 SmartGWT 中尝试过这种方法,它在某种程度上有效,但有一些小故障。我使用了 SGWT 的模态窗口,它与您提出的小部件类似。在 SGWT 的模态窗口中运行时,结帐表单中的某些操作会导致 javascript 错误。如果我找不到更清洁的解决方案,无论如何我都必须采用这种方法。我真的很想用纯 HTML/Javascript 术语来理解示例 1 和 2 中的区别,将 GWT 放在一边。
    猜你喜欢
    • 2012-05-02
    • 2011-02-04
    • 2012-02-07
    • 2016-09-19
    • 1970-01-01
    • 2014-06-13
    • 2012-07-04
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多