Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.09.2017, 14:20
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Как пересилить обработчик клика?
Здравствуйте!

Есть вот такой html:
<div class="btn-toolbar" id="toolbar">
  <div class="btn-wrapper" id="toolbar-delete">
	<button onclick="if (document.adminForm.boxchecked.value == 0) { alert(Joomla.JText._('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST')); } else { if (confirm('Delete selected files?')) { Joomla.submitbutton('fsdelete.deleteFSSelected'); } }" class="btn btn-small">
	<span class="icon-delete"></span>
	Delete selected files</button>
  </div>
  <div class="btn-wrapper" id="toolbar-delete">
	<button onclick="Joomla.submitbutton('fsdelete.deleteFSAllFiles');" class="btn btn-small">
	<span class="icon-delete"></span>
	Delete all files from FS</button>
  </div>
  <div class="btn-wrapper" id="toolbar-help">
	<button onclick="Joomla.popupWindow('http://siteforhelp.ru', 'Help', 700, 500, 1)" rel="help" class="btn btn-small">
	<span class="icon-question-sign"></span>
	Help</button>
  </div>
  <div class="btn-wrapper" id="toolbar-options">
	<button onclick="location.href='index.php?option=com_config&amp;view=component&amp;component=com_vm3delpics&amp;path=&amp;return=aHR0cDovL2xvY2FsaG9zdC9hc3UxNzAzMjIvYWRtaW5pc3RyYXRvci9pbmRleC5waHA%2Fb3B0aW9uPWNvbV92bTNkZWxwaWNzJnZpZXc9ZnNkZWxldGU%3D';" class="btn btn-small">
	<span class="icon-options"></span>
	Options</button>
  </div>
</div>

Пытаюсь с помощью подключаемого js-фала с кодом:
jQuery("#toolbar > #toolbar-delete:nth-of-type(1)").click(function (e) {
	e.preventDefault();
	alert("Here we are!");
})

сделать так, чтобы первым по клику на первую кнопку реагировал мой обработчик. Не получается
В чем ошибка? Скажите пожалуйста.

Последний раз редактировалось borus, 27.09.2017 в 14:49.
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2017, 14:21
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

кажется я button забыл.
Такой код тоже не срабатывает:
jQuery("#toolbar > #toolbar-delete:nth-of-type(1) .btn.btn-small").click(function (e) {
	e.preventDefault();
	alert("Here we are!");
})
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2017, 14:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

borus, ИД должен быть уникальным на странице...
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2017, 14:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от borus
Как пересилить обработчик клика?
Наращивать мускулы и победить в конце концов.
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2017, 14:53
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

урать все лишнее

jQuery(".btn-small").click(function (e) {
	e.preventDefault();
	alert("Here we are!");
});


js в html коде плохая практика
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2017, 14:53
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

ksa,
сделал #toolbar-delete уникальным, но это пока не помогло
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2017, 14:55
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<div class="btn-toolbar" id="toolbar">
  <div class="btn-wrapper" id="toolbar">
	<button onclick="if (document.adminForm.boxchecked.value == 0) { alert(Joomla.JText._('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST')); } else { if (confirm('Delete selected files?')) { Joomla.submitbutton('fsdelete.deleteFSSelected'); } }" class="btn btn-small">
	<span class="icon-delete"></span>
	Delete selected files</button>
  </div>
  <div class="btn-wrapper" id="toolbar-delete">
	<button onclick="Joomla.submitbutton('fsdelete.deleteFSAllFiles');" class="btn btn-small">
	<span class="icon-delete"></span>
	Delete all files from FS</button>
  </div>
  <div class="btn-wrapper" id="toolbar-help">
	<button onclick="Joomla.popupWindow('http://siteforhelp.ru', 'Help', 700, 500, 1)" rel="help" class="btn btn-small">
	<span class="icon-question-sign"></span>
	Help</button>
  </div>
  <div class="btn-wrapper" id="toolbar-options">
	<button onclick="location.href='index.php?option=com_config&amp;view=component&amp;component=com_vm3delpics&amp;path=&amp;return=aHR0cDovL2xvY2FsaG9zdC9hc3UxNzAzMjIvYWRtaW5pc3RyYXRvci9pbmRleC5waHA%2Fb3B0aW9uPWNvbV92bTNkZWxwaWNzJnZpZXc9ZnNkZWxldGU%3D';" class="btn btn-small">
	<span class="icon-options"></span>
	Options</button>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
	jQuery("#toolbar-delete .btn-small").click(function (e) {
	e.preventDefault();
	alert("Here we are!");
});
</script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2017, 15:13
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

j0hnik,что-то не срабатывает. #toolbar-delete уже уникальный. Может быть дело в том, что в js-файле есть ещё код другой и я не правильно всё расставил по местам?
Вот полный код файла:
jQuery( document ).ready(function() {
	var time_limit = 25;//временной лимит(сек) на ответ сервера
	var i = 0;
	var go = 1;//признак того, что нужно продолжать считывать информацию о файлах
	var from = 0;//с какого файла по порядку начинаем проверять
	var read_cnt = 3;//число проверяемых файлов
	
	var request = function(){
		jQuery.getJSON('index.php?option=com_vm3delpics&task=fsdelete.read&format=json'
		, {
			data: {
				"time_limit":time_limit,
				"from":from,
				"read_cnt":read_cnt 
			}
		})
		.always(function(r) {
			var start = new Date().getTime();
			
			if (!r.success && r.message){
				alert(r.message);
			}
			if (r.messages){
				Joomla.renderMessages(r.messages);
			}
			if (r.data){
				//debugger;
				var elapsed = new Date().getTime() - start;
				//alert(elapsed);
				if(elapsed/1000 - 0.5 < time_limit){
					read_cnt = r.data.read_cnt+1;
				}
                else{
					if(r.data.read_cnt > 1)	read_cnt = r.data.read_cnt-1;
					else alert("Слишком медленный ответ сервера! Не могу уменьшить число считываемых файлов");
                }
				from = r.data.from + r.data.read_cnt;

				//отображение найденных файлов
				var tbl = jQuery("#fsscanres")[0];
				var rws = tbl.rows;
				var lst = rws[rws.length - 2];
				var cls = lst.cells.length;
                var rows_length = rws.length;
				for (var key in r.data.files) {
					i++;
					var ro = tbl.insertRow(rws.length - 1);
					for (var j = 0; j < cls; j++){
						var ce = ro.insertCell(-1);
						switch(j){
							case 0 :
								ce.innerHTML = rows_length + i - 2;
								break;
							case 1 :
								ce.innerHTML = '<input type="checkbox" id="cb0" name="cid[]" value="'+ r.data.files[key]["file_url"] + '" onclick="Joomla.isChecked(this.checked);">';
								break;
							case 2 :
								ce.innerHTML = r.data.files[key]["file_url"];
								break;
						}
					}
				}
				i = 0;

			}
            if(r.data.go) request();
		});
	}
	request();
});

jQuery("#toolbar-delete .btn-small").click(function (e) {
	e.preventDefault();
	alert("Here we are!");
});
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2017, 15:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от borus
сделал #toolbar-delete уникальным, но это пока не помогло
Бивас, тест! (с)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	$('button').each(function(){
		var one=this.onclick;
		this.onclick=null;
		$(this).click(function(){
			two();
			one();
		});
	});
	function two(){
		alert(2);
	};
});
</script>
</head>
<body>
<button onclick='alert(1)'>Test</button>
</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2017, 15:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от borus
e.preventDefault();
Ты не отменишь всплытие на самом себе.
Т.ч. остается только просто поменять местами сами вызовы функций...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить свой обработчик перед остальными? 12345678 Events/DOM/Window 14 24.06.2015 16:19
Как после ресайза вызвать обработчик один раз? Nanto Events/DOM/Window 1 23.08.2013 19:55
Как повесить обработчик mousedown на datepicker input-а? gait Events/DOM/Window 3 10.05.2013 14:09
Как запретить отмену выделения текста от клика мышью? Маэстро Internet Explorer 0 03.04.2012 21:21
Как снять обработчик с очередью FanAizu jQuery 0 11.02.2012 19:28