提问人:dtd439 提问时间:3/17/2023 更新时间:3/17/2023 访问量:50
jquery click if else 语句不起作用
jquery click if else statement not working
问:
我尝试输入文本,然后通过单击其中一个框选项将该文本放置到特定的 div 框中
HTML 代码:
<input class="textField" type="text">
<div class="sendToBox1">send to box 1</div>
<div class="sendToBox2">send to box 2</div>
<div class="box1">box 1</div>
<div class="box2">box 2</div>
jQuery代码:
$(document).ready(function() {
var $input1 = $('.textField');
var $sendToBox;
var $selectedBox;
if($(".sendToBox1").on("click")) {
$sendToBox = $(".sendToBox1");
$selectedBox = $(".box1");
} else if($(".sendToBox2").on("click")) {
$sendToBox = $(".sendToBox2");
$selectedBox = $(".box2");
}
$($sendToBox).click(function() {
$($selectedBox).append($input1.val());
$input1.val('');
});
});
我希望 if else 语句做的是将类名 .sendToBox1 或 .sendToBox2 存储为要$sendToBox的值,具体取决于单击哪个框选项,并且 .box1 或 .box2 也同样作为值存储到变量 $selectedBox。单击其中一个框选项后,类名应存储在 2 个变量中,同时将文本放置到所选的 div 框中。问题是else if语句似乎不起作用。
发生的情况是,在键入文本后,我单击发送到框 1,它将类名 .sendToBox1 和 .box1 存储到变量 $sendToBox 和 $selectedBox然后也成功地将文本放置在框 1 中,但在键入另一个文本并尝试通过单击第二个框选项将文本放置在第二个框内后, 这是行不通的。在您自己的设备上运行它可能会有所帮助,以便更好地查看问题。我希望我的解释是可以理解的,并且有人可以帮助修复代码。谢谢。
答:
jQuery 方法链 - 所以 $(“.sendToBox1”).on(“click”) == $(“.sendToBox1”) (有点,不完全是),所以你的 if 语句是 if (jquery_is_an_object) 它总是这样。
与其将其视为“如果单击了 box1”,不如将其视为“单击 box1 时”,这只是另一个事件处理程序。
在不过多更改代码概念的情况下,这看起来像您想要的:
$(document).ready(function() {
var $input1 = $('.textField');
var $sendToBox;
var $selectedBox;
$(".sendToBox1").on("click", function() {
$selectedBox = $(".box1");
});
$(".sendToBox2").on("click", function() {
$selectedBox = $(".box2");
});
$(".sendToBox1,.sendToBox2").click(function() {
$($selectedBox).append($input1.val());
$input1.val('');
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="textField" type="text">
<div class="sendToBox1">send to box 1</div>
<div class="sendToBox2">send to box 2</div>
<div class="box1">box 1</div>
<div class="box2">box 2</div>
但是,这并不“感觉”正确,因为同一事件有多个点击处理程序。相反,将“send to”部分移动到它自己的函数,并从事件处理程序中调用:
$(document).ready(function() {
var $input1 = $('.textField');
var $sendToBox;
var $selectedBox;
$(".sendToBox1").on("click", function() {
sendTo($input1, $(".box1"));
});
$(".sendToBox2").on("click", function() {
sendTo($input1, $(".box2"));
});
function sendTo(from, to) {
to.append(from.val());
from.val("");
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="textField" type="text">
<div class="sendToBox1">send to box 1</div>
<div class="sendToBox2">send to box 2</div>
<div class="box1">box 1</div>
<div class="box2">box 2</div>
这导致了下一步:如果您想将发送添加到/框 3 怎么办?重复相同的代码?相反,请编写代码,使其由数据驱动:
$(document).ready(function() {
var $input1 = $('.textField');
$(".sendTo").on("click", function() {
var box = $(this).data("sendto");
$(`[data-box='${box}']`).append($input1.val())
$input1.val("");
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="textField" type="text">
<div class="sendTo" data-sendto='box1'>send to box 1</div>
<div class="sendTo" data-sendto='box2'>send to box 2</div>
<div data-box="box1">box 1</div>
<div data-box="box2">box 2</div>
现在,在添加另一个框时,您只需添加:
<div class="sendTo" data-sendto='box3'>send to box 3</div>
<div data-box="box3">box 3</div>
并且不进行任何代码更改。
在这种情况下,即使您从不添加第 3 个框,代码仍然更加简洁。
评论
if