【问题标题】:Create a dynamic link based on checkbox values根据复选框值创建动态链接
【发布时间】:2017-02-21 20:46:52
【问题描述】:

我想要实现的是:

  1. 页面的默认状态 = 未勾选复选框,未显示链接
  2. 用户勾选一个(或多个)复选框
  3. 显示链接,从复选框值动态生成,格式如下:http://example.com/?subject=Products&checked=Blue,Green,Purple(其中选中的复选框值为“蓝色”、“绿色”和“紫色”)

到目前为止,根据另一个问题 (Using JavaScript to load checkbox Values into a string) 的建议,我已经能够通过按钮以正确的格式(作为所需 url 的一部分)将值打印到 console.log:

$("button").on("click", function(){
	var arr = []
	$(":checkbox").each(function(){
	   if($(this).is(":checked")){
		 arr.push($(this).val())
	   }
	})
	var vals = arr.join(",")
	var str = "http://example.com/?subject=Products&" + vals
	console.log(str)	
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="checkbox" id="selected" name="selected" value="Blue" class="products"> Blue<br>
<input type="checkbox" id="selected" name="selected" value="Green" class="products"> Green<br>
<input type="checkbox" id="selected" name="selected" value="Purple" class="products"> Purple
<br>
<button>button</button>

但是,它们不会根据选中的复选框动态加载(它需要您按下按钮才能生成 url)并且链接尚未打印到页面以供访问者使用(它卡在console.log,可见但不可用)。

我被告知.change() 可能是这里的方式,就动态生成链接而言。比如:jQuery checkbox change and click event

如何合并这两种方法以达到我想要的结果?

【问题讨论】:

  • 请注意,您的 html 中重复的 id="selected" 无效。 ID 必须是唯一的 :)

标签: javascript jquery checkbox hyperlink


【解决方案1】:

这将为您提供一个网址

http://example.com/?subject=Products&amp;checked=Blue,Green,Purple

(请参阅下面的可能更好的方法):

$(document).on("change", ".mod-link", function() {
  var arr = []
  $(".mod-link:checked").each(function() {
    arr.push($(this).val());
  })
  var vals = arr.join(",")
  var str = "http://example.com/?subject=Products&checked=" + vals;
  var link = arr.length > 0 ? '<a href="'+str+'">Click me</a>': '' ;
  
  $('.link-container').html(link);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="mod-link" name="selected" value="Blue" class="products">Blue
<br>
<input type="checkbox" class="mod-link" name="selected" value="Green" class="products">Green
<br>
<input type="checkbox" class="mod-link" name="selected" value="Purple" class="products">Purple
<br>
<div class="link-container"></div>

然而

我会做的有点不同。

我会选择以下 url 结构:

http://example.com/?subject=Products&amp;checked[]=Blue&amp;checked[]=Green&amp;checked[]=Purple

当 PHP 接收到它时,检查的将是一个像 ['Blue','Green','Purple'] 这样的数组,而不是像 'Blue,Green,Purple' 这样的字符串

$(document).on("change", ".mod-link", function() {
  var arr = []
  $(".mod-link:checked").each(function() {
    arr.push($(this).val());
  })
  var vals = 'checked[]=' + arr.join("&checked[]=")
  var str = "http://example.com/?subject=Products&" + vals;
  var link = arr.length > 0 ? '<a href="'+str+'">Click me</a>': '' ;
  
  $('.link-container').html(link);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="mod-link" name="selected" value="Blue" class="products">Blue
<br>
<input type="checkbox" class="mod-link" name="selected" value="Green" class="products">Green
<br>
<input type="checkbox" class="mod-link" name="selected" value="Purple" class="products">Purple
<br>
<div class="link-container"></div>

【讨论】:

  • ^^ 完美!这正是我想要的!你摇滚!最后一件事。如果复选框都被取消选中,链接是否有可能再次消失?如果没有也不会太在意,但如果可能的话,它会更干净。
  • 太棒了!两种工作选择! @scarabaeus 以不同的方式到达那里,但也做得很完美。绝对精彩。谢谢! :D
  • P.S. URL 结构是 Gravity Forms 的先决条件。他们的查询字符串都是逗号分隔的。但是一个非常好的建议,谢谢!
  • 有没有办法让按钮始终显示?也许在选择之前它是灰色的,然后在选择时着色?
【解决方案2】:

如果我正确理解了您的问题,我相信您的思路是正确的。我按照您的建议在您的复选框上添加了更改事件。试试下面修改后的代码。

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="checkbox" name="selected" value="Blue" class="products"> Blue<br>
<input type="checkbox" name="selected" value="Green" class="products"> Green<br>
<input type="checkbox" name="selected" value="Purple" class="products"> Purple
<br>
<span class="link"></span>

JavaScript

$("input[type=checkbox]").on("change", function(){
    var arr = []
    $(":checkbox").each(function(){
       if($(this).is(":checked")){
         arr.push($(this).val())
       }
    })
    var vals = arr.join(",")
    var str = "http://example.com/?subject=Products&checked=" + vals
    console.log(str);

  if (vals.length > 0) {
    $('.link').html($('<a>', {
      href: str,
      text: str
    }));
  } else {
    $('.link').html('');
  }  
})

Working CodePen

您的button 不再被使用。这是你要找的吗?

【讨论】:

  • 不要忘记创建并添加到页面的实际链接
  • 不是 codepen,是 OP 要求的链接 - ...and the link hasn't been printed to the page
  • 哦!谢谢!我错过了那部分!现已添加。
  • @scarabaeus / OP 同样,你会想要放弃重复的 id,显然取自 OP 的示例,但它们不是有效的 html :)
  • 更新了您的建议,@DelightedD0D。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多