Как вызвать функцию по нажатию флажка, который является всплывающим при нажатии элемента d3, например, прямоугольник - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть прямоугольник, который является элементом d3, я хочу нажать на этот прямоугольник, и должно появиться всплывающее окно, которое будет иметь флажок. При нажатии этого флажка должна быть вызвана функция.
На данный момент, когда я вызываю функцию в HTML, эта конкретная функция не вызывается

mini.append("g").selectAll("miniItems")
            .data(data)
            .enter().append("rect")
            .attr("id", "rect")
            .attr("x", 200)
            .attr("y", function(d,i) {return y2(i*1.2)+5;})
            .attr("width", windowWidth - 700)
            .attr("height", 15)
            .attr("stroke", "grey")
            .on("click", onClick);/*on click of d3 element this function is invoked*/

  function onClick(d){
     let content;
    content = "<div style='background: white;width:70px; box-shadow:3px 3px 5px #797878;height:30px; padding:8%'><input type='checkbox' id='myCheck' (click)='onClaim(d.executionId)'></input>"+ "claim" + "</div>";
     div.html(content)
       .style("left", (d3.event.pageX) + "px") 
        .style("top", (d3.event.pageY) + "px")
        .style("display", "block");
   }

 function onClaim(value){/*this function is not executed*/
        console.log(value);
}

enter image description here

Я не получаю никакого решения для вызова этой функции
Любая помощь приветствуется. Заранее спасибо:)

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Хло дкшааа,

Вы можете попробовать это.

Поскольку вы используете флажок вместо onClick, вы можете использовать onChange.

Так что вместо этого

<input type='checkbox' id='myCheck' (click)='onClaim(d.executionId)'>

вы можете использовать

<input type="checkbox" id="isCheckBox" (change)="onClaim($event, d.executionId)"/>

и в угловом компоненте вы можете использовать событие как

function onClaim(event, execId) {
    if(event.target.checked){
       //DO SOMETHING
    }
}

надеюсь, это поможет. ; -)

0 голосов
/ 14 ноября 2018

Почему бы не добавить события способом d3, поскольку вы уже используете d3?

В функции onClick вы можете привязать событие click к входу # myCheck.

div.select('input#myCheck').on('click', function () {
    if(this.checked) // checking if the checkbox is checked
        onClaim(d.executionId);
});

И, пожалуйста, опубликуйте рабочий фрагмент, который облегчает ответ (так как в вашем сообщении отсутствовали определения div, mini и т. Д. В любом случае, я создал фрагмент с использованием примера кода здесь:

var svg = d3.select('svg#chart');
var div = d3.select('div.tooltip');

var data = [{id: 1, executionId: 1}, {id: 2, executionId: 2}];

svg.append("g").selectAll("miniItems")
            .data(data)
            .enter().append("rect")
            .attr("id", "rect")
            .attr("x", 100)
            .attr("y", function(d,i) {return (i*100);})
            .attr("width", 100)
            .attr("height", 15)
            .style("stroke", "grey")
            .on("click", onClick);/*on click of d3 element this function is invoked*/

  function onClick(d){
     let content;
    content = "<div style='background: white;width:70px; box-shadow:3px 3px 5px #797878;height:30px; padding:8%'><input type='checkbox' id='myCheck'/>"+ "claim" + "</div>";
     div.html(content)
       .style("left", (d3.event.pageX) + "px") 
        .style("top", (d3.event.pageY) + "px")
        .style("display", "block");
     div.select('input#myCheck').on('click', function () {
     	if(this.checked)
	     	onClaim(d.executionId);
     })
   }

 function onClaim(value){/*this function is not executed*/
        console.log(value);
}
div.tooltip {
      position: absolute;
}
<script src="https://d3js.org/d3.v4.min.js"></script>

<svg id="chart" width="400" height="400"></svg>

<div class="tooltip">

</div>

Надеюсь, это поможет.

0 голосов
/ 14 ноября 2018

У вас есть некоторые проблемы с кавычками в вашем коде.Попробуйте это:

 content = "<div style='background: white;width:70px; box-shadow:3px 3px 5px #797878;height:30px;'>
       <input type='checkbox' onClick='onClaim(d.data);'>
     </div>"

Вы закрывали окружение "в конце 30px; я заменил это одинарной кавычкой и добавил двойную кавычку в самом конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...