【问题标题】:Jquery change background colour for a selected divJquery更改所选div的背景颜色
【发布时间】:2016-10-26 04:58:50
【问题描述】:

我有这个 4*4 格式的 HTML 代码 div:

 $(document).ready(function() {
    $("div").click(function(e){

    var id_val=this.id;

    var word = id_val.split("-").pop();
    alert(word)
    e.preventDefault();

    for(var i=1;i<=4;i++)
    {
    if(i!=word)
    {
     $("#div-"+i+"").css("background-color","white");
    }
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div-1">
    	<p>div1</p>
        <div id="div-2">
		<p>div2</p>
            <div id="div-3">
			<p>div3</p>
				<div id="div-4">
					<p>div4</p>
				</div>
            </div>
        </div>
    </div>

我已经编写了 jquery 代码,点击时特定的 div 必须将颜色更改为红色,而剩余的 div 颜色应为白色

当我执行此操作时,只有 div1 将颜色更改为红色,而其他 div 没有更改颜色。

例如:

如果我点击 div1 变为红色,其他 div2,div3,div4 应该是白色 颜色 如果我点击 div2 变为红色,其他 div1,div3,div4 应该是白色的

颜色

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    您需要使用e.stopPropagation(); 来防止其他 div 元素也被触发。

    您没有正确终止脚本末尾的}); 的前两行。

      $(document).ready(function() {
        $("div").click(function(e) {
    
          var id_val = this.id;
    
          var word = id_val.split("-").pop();
          if (word != null) {
          alert(word)
          e.stopPropagation();
    
          for (var i = 1; i <= 4; i++) {
            if (parseInt(i) === parseInt(word)) {
              $("#div-" + i + "").css("background-color", "red");
          
            } else {
                $("#div-" + i + "").css("background-color", "white");
            }
          }
         }
        });
      });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div id="div-1">
      <p>div1</p>
      <div id="div-2">
        <p>div2</p>
        <div id="div-3">
          <p>div3</p>
          <div id="div-4">
            <p>div4</p>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 谢谢,我试过用这个让用户点击特定的 div 它没有改变颜色..
    • @Mahesh 我更新了答案——现在似乎可以正常工作了
    • 谢谢..!它对我有用..请让我知道有什么用:e.stopPropagation();..??
    • @Mahesh event.stopPropogation() 阻止事件冒泡(由于对象具有多个具有相似绑定事件的父对象而多次触发)。示例:您有三个 div,都嵌套在彼此内部,如果您执行 $("div").click() 并单击第三个 div(嵌套在另外两个内部),它将触发事件 3 次,一次对于您单击的每个 div。 event.stopPropogration() 将导致它仅触发一次并在为每个父 div 触发之前停止。 w3schools.com/jquery/event_stoppropagation.asp
    【解决方案2】:

    试试类似的东西

    $("div").click(function(e){
    $("div[id^='div-']").css("background-color","white");
    $(this).css("background-color","red");
    }
    

    【讨论】:

    • 您好,只有第一次点击时,div1 变为红色,其他 div 为白色,当我第二次点击 div2 时,它不会将颜色变为红色,其他 div 不会改变颜色变白
    【解决方案3】:

    您需要使用e.stopPropagation() 而不是e.preventDefault()。此外,由于 div 是嵌套的,您应该为内部 p 标签而不是 div 本身赋予颜色。同时正确终止您的功能。

    $(document).ready(function() {
    $("div").click(function(e){
    
    var id_val=this.id;
    $(this).first("p").css("background-color","red")
    var word = id_val.split("-").pop();
    alert(word)
    e.stopPropagation();
    
    for(var i=1;i<=4;i++)
    {
    if(i!=word)
    {
     $("#div-"+i+"").css("background-color","white");
    }
    }
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="div-1">
        <p>div1</p>
        <div id="div-2">
        <p>div2</p>
            <div id="div-3">
            <p>div3</p>
                <div id="div-4">
                    <p>div4</p>
                </div>
            </div>
        </div>
    </div>

    【讨论】:

    • @Mahesh 你能检查一下这个答案,让我知道它是否适合你
    【解决方案4】:

    这对我有用

            $("div").click(function (e) {
                $(this).css("background-color", "red");
                $('div:not(#' + this.id + ')').css("background-color", "white");
                e.stopImmediatePropagation();
            });
    

    【讨论】:

    • 你能告诉我 e.stopImmediatePropagation(); 有什么用吗??
    • e.stopPropagation() 将仅停止父事件的运行,而 e.stopImmediatePropagation() 将停止所有事件的运行。在这种情况下,老实说,您可以只使用 e.stopPropagation() 就可以逃脱。
    【解决方案5】:

    尝试使用这个简单的代码

    $(document).ready(function() {
    $("div").click(function(e) {
      $('div[id^="div-"] p').css("background-color", "white"); //change the remaining elements who's id start with div- color to white 
      if ($(e.target).is('p')) {
        $(e.target).css("background-color", "red"); //change the clicked element color
      }
    });
    
    });
    

    $("div").click(function(e) {
      $('div[id^="div-"] p').css("background-color", "white"); //change the remaining elements who's id start with div- color to white 
      if ($(e.target).is('p')) {
        $(e.target).css("background-color", "red"); //change the clicked element color
      }
    });
    body {
      background: #ccc;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="div-1">
      <p>div1</p>
      <div id="div-2">
        <p>div2</p>
        <div id="div-3">
          <p>div3</p>
          <div id="div-4">
            <p>div4</p>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 当我第二次点击 div2 时,它没有将颜色变为红色..请检查或分享我的 jsfiddle 链接..请
    • 我为什么要分享你的 jsfiddle,为什么,为什么你的 div 放在其他 div 里面?
    • 在 div1 和 div 2 之间单击 :) 我更喜欢使用 'p' 而不是 'div'。
    • 这个答案似乎在问题可能涉及的 4 个元素之外的其他 div 上触发
    • @Mahesh e.stopPropagation() 停止点击事件的冒泡
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多