忽略javascript preventDefault()

忽略javascript preventDefault(),javascript,django,preventdefault,django-autocomplete-light,Javascript,Django,Preventdefault,Django Autocomplete Light,因此,我试图找到一个解决我的问题的方法,但这似乎是我在so和Google上看到的其他preventDefault()问题所独有的。它也可能有点太窄,但如果有人有任何调试技巧,也将不胜感激 我有一个网站,向用户显示不同的视频“书签”,用户可以点击它们并将视频/搜索更改为在页面上的div中播放时间。用户可以在3个位置执行此操作。左边是一个显示“最近观看的十大视频”的菜单,右边是一个基于D3.js的拓扑树,顶部是一个由django autocomplete light构建的搜索框。这三种方法都使用相同

因此,我试图找到一个解决我的问题的方法,但这似乎是我在so和Google上看到的其他preventDefault()问题所独有的。它也可能有点太窄,但如果有人有任何调试技巧,也将不胜感激

我有一个网站,向用户显示不同的视频“书签”,用户可以点击它们并将视频/搜索更改为在页面上的div中播放时间。用户可以在3个位置执行此操作。左边是一个显示“最近观看的十大视频”的菜单,右边是一个基于D3.js的拓扑树,顶部是一个由django autocomplete light构建的搜索框。这三种方法都使用相同的javascript函数(playvid)来更改视频和更新网页上的元数据信息。例如,用户单击一个链接并进入视频1的第4分钟,然后单击另一个链接并进入视频45的第9分钟

当我在我的开发机器上实现时,这三种方法都与FF 18和Safari 6(Django 1.4.3、Python2.7.3,运行Django的web服务器)配合使用。然后我把它放到生产服务器上(Django 1.4.3、Python2.6.6、Apache/mod_wsgi)。现在,使用django autocomplete light的搜索框的方法不起作用,但是其他两个,请执行!我认为不同的Python版本不应该是罪魁祸首。。。?autocomplete代码与我的开发代码相同,但现在它似乎是preventDefault()的某种javascript问题?但是,经过数小时的调试,我无法找出原因和位置,因为代码似乎忽略了我的e.preventDefault();call…这是我的/navigation\u autocomplete/script.html代码,它捕获了用户在autocomplete搜索框中单击的内容(尽管我觉得问题是javascript,而不是Django模块):

{%从未来加载url%}
$(文档).ready(函数(){
$(“#导航_自动完成”)。您的LabsautoComplete({
url:“{%url”导航\u自动完成“%}”,
选举人:“a”,
}).input.bind('selectChoice',函数(e,choice,autocomplete){
e、 预防默认值();
e、 停止即时复制();
var URL=choice.attr('href');
警报('不应跟随链接!!');
播放视频(网址);
返回false;
});
});
FF和Safari中会弹出alert(),使用Firebug,我可以看到浏览器试图加载playvid(),但随后遵循链接--e.preventDefault();完全被忽略了。正如你所看到的,我也试图阻止泡沫(变得绝望),但没有运气

有人知道为什么我的preventDefault()代码在这个特定的方法中可能会被忽略,但在我的其他调用中效果很好(特别是在开发所有3个方法时效果很好)?或者关于如何跟踪此问题的调试提示

谢谢

===========

更新 我尝试了jpic的解决方案,但它不起作用……下面是新的代码块(可能我是胖手指……):


$(文档).ready(函数(){
$(“#navigation_autocomplete a”)。在('click',函数(e){e.preventDefault();})上;
$(“#导航_自动完成”)。您的LabsautoComplete({
url:“/video_search/navigation/”,
选举人:“a”,
}).input.bind('selectChoice',函数(e,choice,autocomplete){
var URL=choice.attr('href');
警报('不应跟随链接!!');
播放视频(网址);
返回false;
});
});
模糊实现 您的代码阻止selectChoice默认值,但不阻止click

当通过鼠标或键盘选择选项时,自动完成对象会触发
输入
元素上的selectChoice。它不会干扰
单击事件。如果您不希望浏览器默认
单击
事件,那么为什么要使用

替代实施建议 您可以制作如下自动完成模板:

{% for video in video_qs %}
<span class="div choice" data-href="{{ video.get_absolute_url }}">{{ video }}</span>
{% endfor %}
例如:

<script type="text/javascript">
$(document).ready(function() {
    $('#navigation_autocomplete')
        .on('click', 'a', function(e) { e.preventDefault(); })
        .yourlabsAutocomplete({
            url: '{% url 'navigation_autocomplete' %}',
            choiceSelector: 'a',
        }).input.bind('selectChoice', function(e, choice, autocomplete) {
            var URL = choice.attr('href');
            playvid(URL);
        });
});
</script>

$(文档).ready(函数(){
$(“#导航_自动完成”)
.on('click','a',函数(e){e.preventDefault();})
.你的实验室要完成吗({
url:“{%url”导航\u自动完成“%}”,
选举人:“a”,
}).input.bind('selectChoice',函数(e,choice,autocomplete){
var URL=choice.attr('href');
播放视频(网址);
});
});

该事件是一次点击。是吗?是的,很抱歉,澄清一下事件是一次点击——尽管在自动完成代码中,他们将其绑定到一个自定义触发器“selectChoice”,该触发器定义为搜索框中的点击。嗨,jpic,我刚刚添加了这一行,但在FF和Safari上仍然得到相同的行为。在Firebug和Safari开发人员控制台中,显示的代码行位于源代码中。但当我点击搜索框中的结果时,会发生以下情况:1)弹出警报窗口,我点击它,2)JS控制台显示对playvid的调用,3)页面重定向到anchor的原始href--preventDefault仍然被忽略?我的错,这是由于错误使用jquery
on()
。答案更新了,你能试试吗?谢谢谢谢成功了!你知道为什么.on功能对我不起作用吗(需要链接绑定而不是单独分配任务?),或者为什么它在我的开发机器上运行良好,但在我的生产机器上运行不好?PS——对于任何想要实现的人,都需要在jpic的替代实现解决方案中使用正确的括号。我告诉过你,我发布的第一个代码是()上的
的错误用法。此
$(“#导航(u自动完成a”)。在('click',函数(e)
上是错误的,应该是
$(“#导航(u自动完成”)。在('click',a',函数(e)
上,真正模拟弃用的
live()
。感谢您的反馈!
{% for video in video_qs %}
<span class="div choice" data-href="{{ video.get_absolute_url }}">{{ video }}</span>
{% endfor %}
<script type="text/javascript">
$(document).ready(function() {
    $('#navigation_autocomplete')
        .yourlabsAutocomplete({
            url: '{% url 'navigation_autocomplete' %}',
            choiceSelector: '.choice',
        }).input.bind('selectChoice', function(e, choice, autocomplete) {
            playvid(choice.data('href'));
        });
});
</script>
$('#navigation_autocomplete').on('click', 'a', function(e) { e.preventDefault(); });
<script type="text/javascript">
$(document).ready(function() {
    $('#navigation_autocomplete')
        .on('click', 'a', function(e) { e.preventDefault(); })
        .yourlabsAutocomplete({
            url: '{% url 'navigation_autocomplete' %}',
            choiceSelector: 'a',
        }).input.bind('selectChoice', function(e, choice, autocomplete) {
            var URL = choice.attr('href');
            playvid(URL);
        });
});
</script>