选中单选按钮时更改图像

时间:2017-10-25 04:22:57

标签: javascript jquery html css

我正在构建一个表单来测量地毯尺寸。在表格中有单选按钮,用户可以选择地毯类型。我想在选中单选按钮时进行制作,地毯图像会根据所选的单选按钮进行更改。

第一张图片:用于选择地毯尺寸的单选按钮

radio button to choose carpet type

第二张图片:根据所选单选按钮更改地毯

carpet image change based on selected radio button

以下是代码:

<form class="carpet-detail text-center container">
      <p class="text-center">Upload your carpet’s photo here :</p>
      <div class="upload-carpet">
        <div id="image-preview">
          <input id="image-upload" name="image" type="file">
        </div>
        <label for="image-upload" id="image-label">Choose File</label>
      </div>
      <p class="carpet-name">Carpet 1</p>
      <p>Choose your carpet shape :</p>
      <div class="carpet-shape">
        <div class="choose-carpet">
          <input checked class="radio-shape" id="carpet-shape-1" name="carpet-shape" type="radio"> <label class="choose-shape" for="carpet-shape-1">Rectangular</label>
        </div>
        <div class="choose-carpet">
          <input class="radio-shape" id="carpet-shape-2" name="carpet-shape" type="radio"> <label class="choose-shape" for="carpet-shape-2">Square</label>
        </div>
        <div class="choose-carpet">
          <input class="radio-shape" id="carpet-shape-3" name="carpet-shape" type="radio"> <label class="choose-shape" for="carpet-shape-3">Round</label>
        </div>
        <div class="choose-carpet">
          <input class="radio-shape" id="carpet-shape-4" name="carpet-shape" type="radio"> <label class="choose-shape" for="carpet-shape-4">Oval</label>
        </div>
      </div>
      <p>Please insert your carpet size :</p>
      <img alt="carpet rectangle" class="carpet-icon" height="116" src="img/icons/carpet-rectangle.svg" width="194">
      <div class="grid-x grid-padding-x carpet-size">
        <div class="small-6 cell text-left">
          <p>Width :</p>
        </div>
        <div class="small-6 cell text-right">
          <p>/sqft</p>
        </div>
        <div class="small-12 cell">
          <div class="input-group plus-minus-input">
            <div class="input-group-button">
              <button type="button" class="button circle" data-quantity="minus" data-field="quantity-width">
                <img src="img/icons/size-minus.svg" alt="minus" width="11" height="11">
              </button>
            </div>
            <input class="input-group-field" type="number" name="quantity-width" value="0">
            <div class="input-group-button">
              <button type="button" class="button circle" data-quantity="plus" data-field="quantity-width">
                <img src="img/icons/size-plus.svg" alt="minus" width="11" height="11">
              </button>
            </div>
          </div>
        </div>
      </div>
      <div class="grid-x grid-padding-x carpet-size">
        <div class="small-6 cell text-left">
          <p>Length :</p>
        </div>
        <div class="small-6 cell text-right">
          <p>/sqft</p>
        </div>
        <div class="small-12 cell">
          <div class="input-group plus-minus-input">
            <div class="input-group-button">
              <button type="button" class="button circle" data-quantity="minus" data-field="quantity-length">
                <img src="img/icons/size-minus.svg" alt="minus" width="11" height="11">
              </button>
            </div>
            <input class="input-group-field" type="number" name="quantity-length" value="0">
            <div class="input-group-button">
              <button type="button" class="button circle" data-quantity="plus" data-field="quantity-length">
                <img src="img/icons/size-plus.svg" alt="plus" width="11" height="11">
              </button>
            </div>
          </div>
        </div>
      </div>
    </form>

5 个答案:

答案 0 :(得分:2)

您只需要一个JavaScript或jQuery事件监听器。

//jQuery version
$('#radio1').on('click', function() {
  $('#image1').attr('src', 'myNewImage.jpg');
});

//Vanilla JavaScript
document.getElementById('radio1').addEventListener('click', null,
  function() {
    document.getElementsById('radio1').setAttribute('src', 'myNewImage.jpg');
});

您显然需要为每个单选按钮添加一个。

答案 1 :(得分:2)

您可以使用jquery的.change事件来执行此操作。 首先将属性value分配给无线电。

<input class="radio-shape" value="Square" id="carpet-shape-2" name="carpet-shape" type="radio">

然后使用juery之后的更改来触发事件。

$('input:radio[name="carpet-shape"]').change(
function(){
    var $src = "";
    if ($(this).val() == 'Square') {
        $src = "img/icons/carpet-square.svg";
    }
    else if ($(this).val() == 'Rectangle') {
        $src = "img/icons/carpet-rectangle.svg";
    }
    else if ($(this).val() == 'Round') {
        $src = "img/icons/carpet-round.svg";
    }
    else{
        $src = "img/icons/carpet-oval.svg"
    }

    $('.carpet-icon').attr('src',$src);

});

这是一个完整的工作jsfiddle 有关change事件的详细信息,请查看其中的jQuery documentation

答案 2 :(得分:0)

您可以使用 ~ + CSS 选择器来更改图片。

通过此方法,如果选中该复选框,我们可以使用~, +选择器选择兄弟姐妹。

然后我们可以将样式应用于选定的兄弟姐妹。

我在这里给出了代码段和工作演示。

CSS代码

       .output-shape {
            width: 200px;
            }
//Square
         #square ~  .output-shape{
                width: 200px;
           }
//Rectangle
          #rectangle:checked ~   .output-shape{
                    width: 280px;
           }
//Circle
          #circle:checked ~   .output-shape{
            border-radius: 50%;
            width: 200px;
           }

HTML CODE

    // Input Field
        <input type="radio" name="radio" id="circle" checked>
        <input type="radio" name="radio" id="rectangle">
        <input type="radio" name="radio" id="square">

   // Label Field
        <label for="circle">circle</label>
        <label for="rectangle">Rectangle</label>
        <label for="square">square</label>

   // OUTPUT    
        <div class="output-shape"></div>

工作演示

&#13;
&#13;
	body, html {
		font-family: sans-serif;
	}
	.box-overlay {
		background-color: coral;
		position: absolute;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
		z-index: -1;
	}
	.box-content {
		background-color: #fff;
		max-width: 600px;
		text-align: center;
		border-radius: 15px;
		min-height: 350px;
		padding: 15px;
		margin-left: auto;
		margin-right: auto;
		margin-top: 100px;
		box-shadow: 0 0 20px rgba(0,0,0,0.5);
	}

	.output-shape {
		width: 200px;
		height: 200px;
		background-color: white;
		border: 1px solid gray;
		margin-left: auto;
		margin-right: auto;
		margin-top: 20px;
		margin-bottom: 20px;
	}
	input {
		display: none;
	}
	label {
		padding: 10px;
		border: 1px solid gray;
		display: inline-block;
		border-radius: 5px;
		text-transform: uppercase;
		margin-top: 5px;
		margin-bottom: 5px;
		margin-left: 5px;
		margin-right: 5px;
	}
	.option-name {
		font-size: 20px;
		margin-left: 10px;
		margin-right: 10px;
		text-transform: uppercase;
	}
	
/*	Circle */
	label[for="circle"] {
		color: dodgerblue;
		border-color: dodgerblue;
	}

	#circle:checked ~ .box-content [for="circle"] {
		color: #fff;
		background-color: dodgerblue;
	}
	#circle:checked ~ .box-content .output .option-name{
		color: dodgerblue;
	}
	#circle:checked ~ .box-content .output .option-name:before{
		content:"Circle" !important;
	}
	#circle:checked ~ .box-content .output .output-shape{
		border-radius: 50%;
		background-color: dodgerblue;
		border-color: dodgerblue;
	}
	#circle:checked ~ .box-overlay {
		background-color: dodgerblue !important;
		
	} 
	
/*	Rectangle */
		label[for="rectangle"] {
		color: darkorange;
		border-color: darkorange;
	}
	
	#rectangle:checked ~ .box-content [for="rectangle"] {
		color: #fff;
		background-color: darkorange;
	}
		#rectangle:checked ~ .box-content .output .option-name{
		color: darkorange;
	}
	#rectangle:checked ~ .box-content .output .option-name:before{
		content:"rectangle" !important;
	}
	#rectangle:checked ~ .box-content .output .output-shape{
		width: 280px;
		background-color: darkorange;
		border-color: darkorange;
		
	}
	#rectangle:checked ~ .box-overlay {
		background-color: darkorange !important;
		
	}
	
/*	Square */
	label[for="square"] {
		color: #3FBB76;
		border-color: #3FBB76;
	}
	#square:checked ~ .box-content [for="square"] {
		color: #fff;
		background-color: #3FBB76;
	}
	#square:checked ~ .box-content .output .option-name{
		color: #3FBB76;
	}
	#square:checked ~ .box-content .output .option-name:before{
		content:"square" !important;
	}
	#square:checked ~ .box-content .output .output-shape{
	background-color: #3FBB76;
		border-color: #3FBB76;
	}
	#square:checked ~ .box-overlay {
		background-color: #3FBB76 !important;
		
	} 
	.box-overlay, .output-shape, .option-name:before {
		transition: all linear 0.50s;
		-webkit-transition: all linear 0.50s;
		-o-transition: all linear 0.50s;
		-moz-transition: all linear 0.50s;
	}
	
	@media (max-width: 768px) {
		.box-content {
			margin-top: 20px;
		}
	}
	@media (min-width: 769px) {
		body, html {
/*			height: 100%;*/
		}
	}
&#13;
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>CSS Shape transition </title>

</head>

<body>
<div class="box">
	<input type="radio" name="radio" id="circle" checked>
	<input type="radio" name="radio" id="rectangle">
	<input type="radio" name="radio" id="square">
	<div class="box-content">
	<label for="circle">circle</label>
	<label for="rectangle">Rectangle</label>
	<label for="square">square</label>
		<h4 class="output">
		You have selected
			<div class="output-shape"></div>
			<span class="option-name"></span>
		</h4>
		
	</div>
	<div class="box-overlay"></div>
	</div>
 

  
  </body>

</html>
&#13;
&#13;
&#13;

注意:要实现此输入元素,需要在上面显示图像元素。

答案 3 :(得分:0)

首先你需要查看哪个无线电输入被检查,然后对图标图像进行一些更改以显示所需的图像:我相信你正在寻找类似下面代码的东西,我没有测试过,所以你可以 想稍微调整一下..

$('.carpet-detail').on('click', 'input', changeImage);
// delegate the the listening to the form so you don't have
// to listen to every radio button, then filter only radio
function changeImage(evt){
// create a function that can receive the event object by
// providing a parameter
  var imageId = evt.target.id;
// store the id of the target element in var
  switch(imageId){
// a simple switch statement to see which radio was checked
    case 'carpet-shape-2':
    $('.carpet-icon').attr("src","carpet-shape-2.jpg");
    break;
// set the correct image for the chosen radio
    case 'carpet-shape-3':
    $('.carpet-icon').attr("src","carpet-shape-3.jpg");
    break;
    case 'carpet-shape-4':
    $('.carpet-icon').attr("src","carpet-shape-4.jpg");
    default:
    $('.carpet-icon').attr("src","default-image.jpg");
  }
}

答案 4 :(得分:-1)

使用纯JavaScript,您可以使用img并为{{1}}代码设置不同的来源。