0

我是移动优化网站。有一个包含不同软件包的页面,您可以通过单击来选择,然后再进入下一页。默认情况下选择包 1,但我在移动设备上隐藏了此选项。如果您不选择其他选项并继续操作,则会出现问题,因为您在不知不觉中选择了一个您看不到的包。

为了解决这个问题,我想默认选择另一个(可见的)包。我不想编辑原始的 javascript 或后端,我宁愿我的代码是分开的。

我试过下面的代码来使用 jQuery 像用户一样“单击”选项。Tt 在演示中有效,但在实际站点上无效。我尝试在延迟后运行它并在 dom 读取和窗口加载中运行它。恐怕我无法发布该网站或使实际代码可见。

$('div').click();

http://jsfiddle.net/LZWjs/3/

4

4 回答 4

0

您可以使用自定义事件来捕获点击事件。只需触发点击

$(document).trigger('customClick');

然后抓住事件:

$(document).on('customClick', function () {
     // do whatever you want
});
于 2012-12-27T14:46:17.280 回答
0

下面的代码:

$('div').click(); 

将在每一个上执行点击事件,div所以这可能不是您想要做的,它可能会多次调用您的选择代码,上帝知道还有什么。为了模拟用户的选择,您需要提供div一个IDtrigger单击它,例如

$('#ID').click();

如果这不能解决您的问题,您可以随时在您的页面选择机制中插入一些 console.logs 或警报,以便您可以跟踪触发了女巫事件。如果您不愿意分享您的代码,我可以帮助您。

于 2012-12-27T14:54:39.167 回答
0

在移动设备上,您可以跳过呈现第一个不相关的选项,然后初始化表单并选择第一个可用选项。如果是单选按钮控件,它将是:

$("ul.optionsList input.anOption:first").attr("checked", true)

...假设这ul.optionsList是选项容器,并且anOption是无线电元素的类名。

于 2012-12-29T03:03:42.020 回答
0

您的方法存在一些问题。

首先,正如 Ivan 所说,$('div').click();这会导致页面中的每个<div>页面都引发 click 事件,这不是您想要的。我已经更新了你的例子来证明这一点。Ivan 建议您使用 ID 来专门选择要单击的包是正确的。例如:

<div id="package1">Hidden</div>
<div id="package2">Pick me</div>
<div id="package3">Another package</div>

<script>$('#package2').click();</script>

或者,您可以使用您的 Javascript 使用的任何方法来区分各种包之间的差异,以确定选择哪个包,可以是 CSS 类、HTML5数据属性等。


其次,您如何隐藏第一个选定的包?可能类似于$('.selected').hide();?为什么不完全从 DOM 中删除第一个包,然后在新的“第一个”包上触发点击事件?例如:

$('.selected').remove();
$('.packages').first().click();

第三,您评论“元素是链接,但 href 是 javascript”。你为什么要触发点击事件<div>呢?从它的声音来看,您应该以<a>元素为目标。


第四,jQuery的click()函数只触发点击 事件。这与“使用 jQuery 像用户一样‘单击’选项”不同。如果您所有的 Javascript 都在<a> href属性中,它只会在用户手动单击它时触发,而不是在触发click事件时触发。我整理了一个例子来强调差异。

于 2012-12-31T10:06:15.693 回答