【问题标题】:inline onclick event in Safari not workingSafari中的内联onclick事件不起作用
【发布时间】:2018-03-12 23:03:34
【问题描述】:

首先我做了一些研究,发现了这两个相关的问题:

  1. onclick event in select HTML not working in Safari

  2. OnClick not working on Safari

现在我已经尝试了这两种解决方案,它们中的每一个都可以在 Chrome/Firefox 中运行,但对于 safari,它就无法正常工作。

问题:

我有一个带有a 标签的li,它有一个内联的onclick 事件,可以加载更多产品,但由于某种原因,如果我在Safari 上单击a 标签,没有任何反应,这怎么可能?

代码:

<li id="page_size_8">
    <a href="javascript:void(0);" onclick="return marketplaceLogin.setPageSize(\'page_size\', '.$maxAmount.', \'All\');">
        All
    </a>
</li>

只是为了说明这是我尝试过的,但它不起作用:

<li id="page_size_8">
    <a href="javascript:void(0);" onfocus="return marketplaceLogin.setPageSize(\'page_size\', '.$maxAmount.', \'All\');">
        All
    </a>
</li>

<li id="page_size_8">
    <a href="javascript:void(0);" onclick="javascript:return marketplaceLogin.setPageSize(\'page_size\', '.$maxAmount.', \'All\');">
        All
    </a>
</li>

页面大小的 JS:

setPageSize: function (fieldId, fieldValue, fieldLabel) {
    "use strict";
    if (typeof fieldId !== "undefined" && typeof fieldValue !== "undefined" && typeof fieldLabel !== "undefined") {
        if (fieldValue !== null && fieldValue !== "" && fieldId !== null && fieldId !== "" && fieldLabel !== null && fieldLabel !== "") {
            if (!isNaN(fieldValue)) {
                fieldValue = parseInt(fieldValue, 10);
                if (fieldValue < 5) {
                    fieldValue = 5;
                }

                var selectId = '#filter_select_marketplace_login_' + fieldId;

                // Update the hidden field
                $('input[name=page_size').val(fieldValue);

                // Update the dropdown
                //window.filterSlider.updateSelectedLabel(selectId);
                $(selectId + ' .dropdown_selected_label_left').html(fieldLabel);

                // Load page 1, this closes the dropdown instantly
                if (typeof window.page_name !== "undefined") {
                    switch (window.page_name) {
                        case 'marketplaceloginproducts':
                            marketplaceLogin.loadProductPage(1);
                            break;
                        case 'marketplaceloginorders':
                            marketplaceLogin.loadOrderPage(1);
                            break;
                    }
                }
            }
        }
    }
    return false;
}

【问题讨论】:

  • marketplaceLogin 是一个全局变量吗?
  • 是的,它是 js 文件中的一个对象
  • 控制台是否出现错误?
  • @Huangism 感谢您的回复,控制台中没有错误,没有加载,没有点击
  • 您需要添加更多代码以供人们帮助您。使用您当前的标记,谁能找出问题所在?我做了这个jsfiddle.net/45zpw88y/2,它可以在 Safari 中使用。只需发布简化代码,不需要复制确切的功能,只需测试一下是否调用了该函数

标签: javascript html safari


【解决方案1】:

你的代码应该直接调用函数而不返回

<li id="page_size_8">
   <a onclick="marketplaceLogin.setPageSize()">All</a>
</li>

缺少输入选择的右大括号

$(input[name=page_size]).val(fieldsvalue)

在 safari 中对其进行了测试,如果不起作用,我怀疑它可能是另一个问题。

https://codepen.io/anon/pen/mxebxR?editors=1111

【讨论】:

  • 这仍然是内联的?
  • 但它有效吗?我已经在 safari 中对其进行了测试,并按预期登录到控制台
  • 如果它仍然不起作用,您可以发布您的 javascript :)
  • 让我也试试不回
  • 请更新并添加括号以便我接受,谢谢分配
【解决方案2】:

我怀疑问题在于javascript 命名空间同时用于hrefonclick

试试:

  1. 替换为href="#"
  2. 删除 href

您也可以将逻辑从 onclick 移动到 href - 尽管我建议不要这样做,因为这不是最佳做法。

【讨论】:

  • 嗨,谢谢,但是用href="#" 替换会导致页面跳转,这就是我使用javascript:void(0); 的原因,而且你自己也不喜欢删除href,即使我测试它不工作
  • 这根本不是 onclick 和 href 交互的方式。试试&lt;a onclick="alert('one')" href="javascript:alert('two')"&gt;test&lt;/a&gt; 做示范
  • @DanielBeck 我的立场是正确的 - 谢谢你的例子!
猜你喜欢
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多