Согласно руководству jquery:

.triggerHandler (eventType [, extraParameters])

где extraParameters - это массив

Если я передал только один параметр в порядке, но если я пытаюсь передать несколько параметров, не работает. Доступен только первый параметр массива

	$('#test')
	
	.off('test_event')
	
	.on('test_event',function(event,parameters){
			console.log(parameters); // return 1 not array
		})
		
	.click(function(){
		$(this).triggerHandler('test_event',[1,2,3,4]);
	})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id = "test">
	test
</button>
0
MTK 25 Май 2017 в 00:20

2 ответа

Лучший ответ

Элементы, передаваемые в массиве в обработчике кликов, разделяются на независимые параметры. Таким образом, они должны быть назначены самому function(). В вашем массиве четыре элемента, поэтому вам нужно передать в функцию четыре переменные:

$('#test')
  .off('test_event')
  .on('test_event', function(event, a, b, c, d) {
    console.log(a, b, c, d);
  })
  .click(function() {
    $(this).triggerHandler('test_event', [1, 2, 3, 4]);
  })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="test">
	test
</button>

Надеюсь это поможет! :)

0
Obsidian Age 24 Май 2017 в 21:27

Количество аргументов в вашем обработчике кликов должно соответствовать тому, что вы передаете. Когда срабатывает обычное событие click, все аргументы будут неопределенными, но когда вы запускаете его и передаете массив, значения разделяются на отдельные параметры.

$('#test')
  .off('test_event')
  .on('test_event', function(event, a, b, c, d) {
    console.log(a, b, c, d);
  })
  .click(function() {
    $(this).triggerHandler('test_event', [1, 2, 3, 4]);
  })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="test">
	test
</button>
1
j08691 24 Май 2017 в 21:28