2013-11-22 3 views
1

Нажмите на поле игнорируется, если родители «OnClick» события переплетены в функцию. Я не хочу, чтобы это произошло: как я могу это сделать? Я удалил свой код, чтобы проиллюстрировать проблему.флажок нажмите игнорируется, если родитель OnClick связать

HTML:

<div class="container" data-bind="click: someFunction"> 
    Click me: <input type="checkbox" data-bind="checked: selected" /> 
</div> 

JS:

function vm() { 
    this.selected = ko.observable(true); 
    this.someFunction = function(){}; 
} 
ko.applyBindings(new vm()); 

Fiddle: here. Попытайтесь установить флажок: кажется, что ничего не происходит (не верно: я объясню позже, что произойдет).

Удаление вызова someFunction в результате контейнера сНа в ожидаемом поведении. См. Пример: here. Очевидно, что это не решает проблему, так как мне нужно также назвать someFunction.


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

Чтобы следовать этой цепи с помощью отладчика, я переплетены событие нажмите на флажок.

<div class="container"> 
    Click me: <input type="checkbox" data-bind="click: startDebug, checked: selected" /> 
</div> 

Вы можете открыть свои средства разработки и посмотреть, как ожидаемое поведение достигается в то время как мы находимся внутри функции startDebug (но вернулась к неправильному позже). Скрипт с отладчиком: here.

+1

Просто вернуть 'true' из вашей функции:' this.someFunction = функция() {возвращает истину;}; 'HTTP : //jsfiddle.net/aYkpL/ – nemesv

+0

Это работает! Большое спасибо! – Saturnix

ответ

1

Вам просто нужно вернуть true от вашего click обработчика для запуска по умолчанию нажмите действия браузера:

function vm() { 
    this.selected = ko.observable(true); 
    this.someFunction = function(){ return true; }; 
} 

Demo JSFiddle.

Смотрите также в документации: Allowing the default click action (вероятно, следующая нота Preventing the event from bubbling будет также уместно)

+0

Я как-то пропустил эту документацию, очень полезен! Большое спасибо! – Saturnix

Смежные вопросы