jquery事件发生两次

时间:2011-07-04 13:26:03

标签: jquery

我有一个select元素,用户可以从中选择一个值并将其复制到textarea元素。一切都按预期工作,只是select元素的值被复制两次。

$('#cp_objs_for_goal_button').mouseup(function(){
    if ($("#cp_objs_for_goal_select").attr("selectedIndex") != 0)
    {
        console.log('selected index: '+$("#cp_objs_for_goal_select").attr("selectedIndex"));
        curr_txt = $('#pop_goal_text').val();
        console.log('curr_txt: '+curr_txt);
        added_txt = $('#cp_objs_for_goal_select option:selected').text();
        console.log('added_txt: '+added_txt);
        if (curr_txt)
        {
            new_pop_text = curr_txt + ' ' + added_txt;
        }
        else
        {
            new_pop_text = added_txt;
        }
        console.log('new_pop_text: '+new_pop_text);
        $('#pop_goal_text').val(new_pop_text);

        // TODO - This throws error:
        // $('#cp_objs_for_goal_select option').get(0).attr('selected', 'selected');
    }
})

当我点击cp_objs_for_goal_button按钮时,我从控制台日志中得到了这个....

selected index: 1
curr_txt:
added_txt: Restore geomorphic integrity
new_pop_text: Restore geomorphic integrity

selected index: 1
curr_txt: Restore geomorphic integrity
added_txt: Restore geomorphic integrity
new_pop_text: Restore geomorphic integrity Restore geomorphic integrity

这里是html:

<select id="cp_objs_for_goal_select" style="width:100%"> 
    <option>Select the Objective you would like to copy to this project:</option> 
    <option>Restore geomorphic integrity</option> 
</select> 
<div id="cp_objs_for_goal_button" class="awesome" style="border:0;">Copy</div>

6 个答案:

答案 0 :(得分:2)

我也确认过,这个脚本是按照预期的方式工作的。然而,该页面有大量的移动部件,我无法隔离问题。所以,我删除了jquery甚至是监听器,并在调用该方法的按钮上添加了on on on。这很好。

感谢所有输入。

答案 1 :(得分:2)

这是Jquery中常见的Bug。你可以找到很多关于互联网的文章特别是因为事件被解雇两次。你可以试试这个

 $(document).on('click', '#task-list li', function(e)
 {
       alert('Hellow world');
       e.stopPropagation();
       return false;
 });

这肯定是Javascript问题,因为如果你点击谷歌并搜索事件火两次,你会看到Angular,Jquery和骨干等都在某个地方发射事件两次甚至三次。所以,它似乎是背后的javascript。

答案 2 :(得分:1)

检查javascript事件冒泡,这是我找到的第一个链接http://www.bennadel.com/blog/1751-jQuery-Live-Method-And-Event-Bubbling.htm

通常event.preventDefault()帮助我

答案 3 :(得分:1)

如果上述答案对您的特定情况没有帮助,请查看此jquery .click() event fires twice。您可能不小心将事件处理程序附加了两次。

答案 4 :(得分:0)

要处理的信息很少,但如果我不得不猜测,请检查以下内容:

仔细检查您的网页上是否有类似的ID。

(确保您的表单没有相同的ID。)

答案 5 :(得分:0)

添加event.stopPropagation()为我解决了这个问题。

以上述代码为例:

$('#cp_objs_for_goal_button').mouseup(function(event){
   //handler code...
   event.stopPropagation();
});

请注意,jQuery事件参数已添加到处理函数中。