1

我想綁定checked上的一個複選框輸入,它位於一個錨標記內,它本身就是click的界限。KnockoutJS:複選框內部點擊綁定錨標記不可選

雖然我知道這可能不是完全有效的(交互式內容可能不是錨標籤的後裔),但我仍然希望按預期工作 - 即使只是爲了理解它。

目前,只處理外部click事件並且點擊從不到達我的複選框。

什麼,我想實現的一個例子是在這裏:http://jsfiddle.net/fzmppu93/2/

有過通過KnockoutJS文件一看,我就試過clickBubble: true錨標籤的click結合 - 無濟於事。

如果您有興趣,用例是一個包含鏈接的無序列表 - 這些「鏈接」中的每一個都包含有關電視節目的信息:標題,演員,圖像,簡介。節目是可選擇的,但也有「快速行動」將其標記爲已見,明星等等。

是否有另一種方法使複選框在錨標籤內工作?

+0

讓我在這裏問你一個問題,爲什麼你要在'anchor'標籤中包含複選框,你可以保留它使一切正常工作。 FYI @ GoodQuestion/Answer .check here http://jsfiddle.net/fzmppu93/4/ –

+0

這個例子是我過於簡單化的標記/樣式,我「繼承」,並且目前不能因爲模板/造型/連續性。對HTML5規範有一個公正的把握。我知道它*應該*看起來像什麼,並且正在改變它的觀點 - 但我現在就會受到約束。 – JDR

+0

[knockoutjs:防止事件冒泡爲沒有處理程序的元素]可能的重複(http://stackoverflow.com/questions/13942279/knockoutjs-prevent-event-bubbling-for-elements-with-no-handler) –

回答

2

我寫了一個類似於「clickBubble」的自定義綁定處理程序,但是地雷允許您阻止任何事件的傳播。

這裏是結合處理程序:

ko.bindingHandlers.preventBubble = { 
     init: function (element, valueAccessor) { 
      var eventName = ko.utils.unwrapObservable(valueAccessor()); 
      var arr = eventName; 
      if (!eventName.pop) { 
       arr = [arr]; 
      } 
      for (var p in arr) { 
       ko.utils.registerEventHandler(element, arr[p], function (event) { 
        event.cancelBubble = true; 
        if (event.stopPropagation) { 
         event.stopPropagation(); 
        } 
       }); 
      } 
     } 
    }; 

這裏就是你們的榜樣的工作fiddle

+0

謝謝非常多 - 這個bindingHandler是非常有用,非常漂亮和優雅的解決方案! – JDR

+0

沒問題的朋友,很高興我能幫忙:) –