无法访问输入的已检查属性

时间:2017-05-03 14:37:32

标签: javascript

<input type="checkbox" onclick="price_change('<?=$service_new_price;?>',this.id)" <?php echo $checked ?> value="<?php echo $entityId; ?>" id="service-option-<?php echo $entityId; ?>" class="service-option" name="service-option[]">

当我点击复选框时,它会一直显示,如果有人帮助我,我将感激不尽

function price_change(value, id) {
  var x = document.getElementsByClassName('price')[0].innerHTML;
  var n_price = x.replace(/[^\w\s.]/gi, '')

  if (id.checked) {
    var new_price = +n_price + +value;
    console.log('checked');
  } else {
    var new_price = +n_price - +value;
    console.log(id, 'uncheck');
  }
  //document.getElementsByClassName('price')[0].innerHTML = new_price;
  //document.getElementsByClassName('price')[1].innerHTML = new_price;
}

2 个答案:

答案 0 :(得分:2)

您将输入的id作为字符串传递给您的函数,但您将其视为输入对象。而不是传递id,而是传递对象本身:

onclick="price_change('<?=$service_new_price;?>',this)"

然后你可以点到对象属性:

function price_change(value, obj) {
  var x = document.getElementsByClassName('price')[0].innerHTML;
  var n_price = x.replace(/[^\w\s.]/gi, '')

  if (obj.checked) {
    var new_price = +n_price + +value;
    console.log('checked');
  } else {
    var new_price = +n_price - +value;
    console.log(id, 'uncheck');
  }
}

修改 解决有关能够在控制台中查看id的值的评论:

您可以在控制台中查看id的值,因为它存在 - 作为字符串。您不能说<string>.checked因为字符串没有名为checked的属性 - 只有输入对象才有。

简单地说,传递对象,或者根据你传入的id检索对象(我更喜欢前者)。

答案 1 :(得分:-1)

这可能会有所帮助

const priceChange = (value, id) => {
	// You need to get the element, not just use its ID
  const checkbox = document.querySelector('#'+id);
  if(checkbox.checked){
  	// Change price
    console.log(checkbox.checked);
  }
  else{
  	// do something else
    console.log(checkbox.checked);
  }
}
<label><input type='checkbox' id='myCheckbox' onclick='priceChange(10, this.id)' /> Checkbox</label>