【问题标题】:Change onclick function when calling base on class调用基类时更改onclick函数
【发布时间】:2020-05-07 06:46:41
【问题描述】:

我有 6 个按钮。前3个属于f-click类,所有按钮都属于s-click。首先,我想通过调用 f-click 来运行 functionOne。然后很快应该禁用再次调用 onclick f-click 并希望使用 s-click 类调用 onclick。 我的条件如下例如,如果按钮是 1 2 3 4 5 6。

  1. 我想通过 onclick 1,2 或 3 获取“你的 in..”消息。
  2. 4,5,6 不应该被调用,直到消息为“你的 in..”
  3. 如果消息“your in..”我想调用按钮值,例如“your clik on”+button_value.(1 到 6)
  4. 不应收到 2 次“your in..”消息。

我该怎么做,我的代码如下,

<button type="button" id="b_1" value="0" class="f-click s-click btn" name="button"></button>
<button type="button" id="b_2" value="1" class="f-click s-click btn" name="button"></button>
<button type="button" id="b_3" value="2" class="f-click s-click btn" name="button"></button>
<button type="button" id="b_4" value="3" class="s-click btn" name="button"></button>
<button type="button" id="b_5" value="4" class="s-click btn" name="button"></button>
<button type="button" id="b_6" value="5" class="s-click btn" name="button"></button>

这是我的 jquery 代码,

$(".f-click").on('click', function() {
 firstFunction()
 secondFunction();
});

function firstFunction() {
 $(".f-click").prop("disabled", true);
 console.log("Your In");
 }

function secondFunction() {
 $(".s-click").prop("disabled", false);
 var selected_button = $(this).val();

 $(".s-click").on('click', function() {
 console.log("Your click on : "+selected_button);
 });
}

但它不起作用,因为第二个函数再次与第一个函数一起工作,我想要做什么。

【问题讨论】:

  • "我有 6 个按钮属于 f-click 类,前 3 个按钮属于 s-click" 错了,你有 6 个 s-click 和 3 个 f-click
  • 另外,“并希望基于 s-click 被调用。”不确定这是什么意思,“base”在这里是什么意思?
  • 好的,我会改的
  • @palaѕн 我想,现在可以理解了。不是吗?
  • 你有很多矛盾的要求。我认为您对自己真正想要的东西感到困惑。首先,你说“如何在调用第一个函数之前阻止第二个函数”..然后你说“如果我点击 1、2 或 3 中的任何按钮,我想禁用所有 3 个按钮,然后运行第二个功能"

标签: jquery function onclick


【解决方案1】:

这里有几个问题:

  1. firstFunction() 内部,您正在调用$(".f-click").prop("disabled", true);,但在secondFunction() 内部,您再次调用$(".s-click").prop("disabled", false);,并且由于所有6 个按钮都有此类,因此.f-click 按钮永远不会被禁用。
  2. 您可以通过在 .s-click 上禁用 .f-click 按钮来解决此问题,例如:

    $(".s-click:not(.f-click)").prop("disabled", false);
    
  3. 此外,在secondFunction() 中,您将多次将click 事件处理程序分配给.s-click 按钮。因此,在第一次单击时,它会显示 1 个控制台日志,然后是 2 个,依此类推。要解决此问题,您应该将.s-click 按钮的click 事件处理程序放在secondFunction() 之外,然后触发点击:

    $(".s-click").click();
    

$(document).on('click', '.f-click', function() {
  firstFunction(this)
});

$(document).on('click', '.s-click:not(.f-click)', function() {
  secondFunction();
});

function firstFunction(obj) {
  $(obj).removeClass('f-click')
  console.log("this is 1st function");
}

function secondFunction() {
  console.log("this is 2nd function");
}
.btn { padding: 4px 15px;  margin: 4px;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="b_1" value="0" class="f-click s-click btn" name="button">1</button>
<button type="button" id="b_2" value="1" class="f-click s-click btn" name="button">2</button>
<button type="button" id="b_3" value="2" class="f-click s-click btn" name="button">3</button>
<button type="button" id="b_4" value="3" class="s-click btn" name="button">4</button>
<button type="button" id="b_5" value="4" class="s-click btn" name="button">5</button>
<button type="button" id="b_6" value="5" class="s-click btn" name="button">6</button>

【讨论】:

  • 但我想调用所有 (6) 个按钮来运行第二个功能,我为此做了什么?
  • 请告诉我,如何阻止第二个函数,直到调用第一个函数。第一次点击 1,2 或 3 时应该只运行第一个函数
  • 兄弟,它工作正常,但我有一些情况,如果我点击 1 、 2 或 3 中的任何按钮,我想禁用所有 3 个按钮,然后运行第二个功能。但直到单击第一个 3 应该不能调用第二个函数。这意味着 4,5 ,6 禁用,直到单击 1,2 或 3
  • 我不明白你的意思。请用详细信息和示例更新您的主要帖子。
  • 我有一些变化,但这足以作为我的问题
【解决方案2】:

移动这个:

$(".s-click").on('click', function() {
 console.log("this is 2nd function");
 });

外面

function secondFunction() {

然后为每个点击事件处理程序在 .on 之前调用 .off()

$(".f-click").off().on('click', function

...以及您的其他点击处理程序

【讨论】:

  • 可以禁用运行第二个功能,直到单击第一个 3.?
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多