2012-06-06 1 views
0

Я делаю календарь. Я хочу, чтобы пользователь мог щелкнуть в любом месте в определенный день (ячейку таблицы), и что-то происходит. В этот день могут быть события, которые содержатся внутри div в ячейке таблицы. Если пользователь нажимает на div, то происходит что-то еще. Мне удалось предотвратить событие пузыря, когда пользователь нажимает на doSomethingElse(), но он не работает при первом нажатии. Он работает только при последующих кликах, никогда не на первом клике. Почему не отменяется действие барботажа событий при первом щелчке и работает только во всех последующих кликах?Как я могу заставить пузырьки событий работать, когда в первый раз нажал div?

HTML:

<table> 
    <tr> 
     <td onclick="doSomething()"> 
      <div class="view" onclick="doSomethingElse()">Text</div> 
     </td> 
    </tr> 
</table> 

Javascript:

function doSomethingElse() { 
    $('.view').click(function(e){ 
     e.cancelBubble = true; 
     e.returnValue = false; 

     if (e.stopPropagation) 
     { 
      e.stopPropagation(); 
     } 
    }); 

    $('#myID').load('myFile.php'); 
} 

UPDATE: Я положил это на моей странице:

<script> 
$(document).ready(function() { 
    $('.view').click(function(e){ 
     e.cancelBubble = true; 
     e.returnValue = false; 

     if (e.stopPropagation) 
     { 
      e.stopPropagation(); 
     } 
    }); 
}); 
</script> 

Затем OnClick = "doSomethingElse()" просто содержит остальную часть моего скрипта. Проблема заключается в том, что doSomethingElse() имеет параметры, так что кажется, что мне нужно еще иметь следующее:

<div class="view" onclick="doSomethingElse(id1,id2)">Text</div> 

Он по-прежнему работает только на 2-й, 3-й, ... щелчками, но не первый.

ответ

1

Поскольку вы эффективно написали код привязки в своем обработчике onclick. Поместите привязку вашего клика (элемент $ ('. View'). Щелкните элемент) в вашем документе. Кроме того, почему загрузка вне обработчика?

+0

Это должно быть правильно. в первый раз, когда пользователь нажимает на div, вызывается doSomethingElse, который просто связывает новый обработчик кликов (еще не может его назвать, потому что он связан сразу же и там). с этого момента любой щелчок должен вызывать как doSomethingElse (который связывает еще один обработчик кликов), так и уже связанные обработчики кликов от этой функции ... который является избыточным и ненужным (но не совсем вредным). – Ian

+0

Спасибо за комментарии. Я не уверен, что вы подразумеваете под словом «Положите привязку вашего клика (элемент $ ('. View'). Щелкните часть) в вашем документе. –

+0

ОК, это $ (". View"). Click - только привязка (например, привязка элементов к этому классу к событию клика, а не выполнение кода внутри обработчика). Таким образом, вы захотите, чтобы привязка была сделана до того, как пользователь сделает щелчок. Вы должны поместить его в «$ (document) .ready (function() {});" блок. Удалите явный onclick = "doSomethingElse()" в разметке, поскольку он является избыточным. –