【问题标题】:Unable to tigger elements inside the webui-popover无法触发 webui-popover 内的元素
【发布时间】:2015-10-20 10:33:30
【问题描述】:

我正在开发一个应用程序仪表板,我试图在 webui-popover 中添加一个 jquery 计算器。计算器在弹出框外工作正常,但当它在弹出框 div 内时,它不起作用。插件作者说“这个问题是由于插件停止了事件冒泡造成的”,

我对 Jquery 或 Javascript 了解不多,如果有人可以帮助我,那就太好了。那么,有什么方法可以让计算器在 popover 元素中工作?

计算器脚本取自HERE

这里是代码

/* WEBUI SCRIPT*/
(function() {
  var settings = {
    trigger: 'click',
    title: '',
    width: 320,
    multi: true,
    closeable: false,
    style: '',
    delay: 300,
    padding: true
  };

  function initPopover() {
    var tableContent = $('#discalc').html(),
      tableSettings = {
        content: tableContent,
        width: 298
      };
    $('a.showdisclac').webuiPopover('destroy').webuiPopover($.extend({}, settings, tableSettings));
  }

  initPopover();
})();


/* CALCULATOR */

$("document").ready(function() {
  var key = null;

  $(document).on("click", ".clean", function() {
    $('.input').val("");
  });

  $(document).on("click", ".Show", function() {
    var EText = $('#Result').val();
    if (EText != "0") {
      var val1 = EText;
      var ButtonVal = $(this);
      var val2 = ButtonVal.text();
      var Res = val1 + val2;
      $('#Result').val(Res);
    } else {
      $('#Result').val();
    }
  });

  $(function(e) {
    var interRes = null;
    var operator;
    $(document).on("click", ".operators", function(e) {
      var value1 = $('#Result').val();
      if (interRes != null) {
        var result = ApplyOperation(interRes, value1, operator);
        interRes = result;
      } else {
        interRes = value1;
      }
      operator = $(this).text();
      $('input').val("");
    });
    $(document).on("keypress", "#Result", function(e) {
      if ((e.keyCode == 61)) {
        var op = operator;
        var res;
        var value2 = $('#Result').val();
        if ((value2 != "")) {
          var data = value2.split("+");
          if (data.length > 2) res = ApplyOperation(interRes, data[data.length - 1], op);
          else res = ApplyOperation(interRes, data[1], op);
        } else {
          res = interRes;
        }
        $('#Result').val(res);
        interRes = null;
      } else if ((e.keyCode == 43) || (e.keyCode == 45) || (e.keyCode == 42) || (e.keyCode == 47)) {
        var value1 = $('#Result').val();
        var inter = (interRes != null);
        if (inter) {
          var op = operator;
          var data = value1.split("+");
          if (data.length > 2) {
            operator = String.fromCharCode(e.keyCode);
            result = ApplyOperation(interRes, data[data.length - 1], op);
            interRes = result;
          } else {
            operator = String.fromCharCode(e.keyCode);
            result = ApplyOperation(interRes, data[1], op);
            interRes = result;
          }
        } else {
          interRes = value1;
        }
        operator = String.fromCharCode(e.keyCode);
        $('.input').text("");
      }
    });
    $(document).on("click", "#Calculate", function(e) {
      var op = operator;
      var res;
      var value2 = $('#Result').val();
      if ((value2 != "")) {
        res = ApplyOperation(interRes, value2, op);
      } else {
        res = interRes;
      }
      $('#Result').val(res);
      interRes = null;
    });
  });

  function ApplyOperation(value1, value2, operator) {
    var res;
    switch (operator) {
      case "+":
        res = addition(value1, value2);
        break;
      case "-":
        res = subtraction(value1, value2);
        break;
      case "*":
        res = multiplication(value1, value2);
        break;
      case "/":
        res = division(value1, value2);
        break;
    }
    return res;
  }

  function addition(first, second) {
    var a = parseFloat(first);
    var b = parseFloat(second);
    var total = a + b;
    return total;
  }

  function subtraction(first, second) {
    var a = parseFloat(first);
    var b = parseFloat(second);
    var sub = a - b;

    return sub;
  }

  function multiplication(first, second) {
    var a = parseFloat(first);
    var b = parseFloat(second);
    var product = a * b;

    return product;
  }

  function division(first, second) {
    var a = parseFloat(first);
    var b = parseFloat(second);
    var divi = a / b;
    return divi;
  }

});
<link rel="stylesheet" type="text/css" href="http://sandywalker.github.io/webui-popover/dist/jquery.webui-popover.min.css"> .webui-popover-content {
  padding: 0;
}
.webui-popover {
  padding: 0;
  border: none;
  border: 0;
  background: transparent;
  -webkit-box-shadow: none;
  -moz-box-shadow: none;
  -ms-box-shadow: none;
  -o-box-shadow: none;
  box-shadow: none;
}
.webui-popover.top>.arrow:after,
.webui-popover.top-right>.arrow:after,
.webui-popover.top-left>.arrow:after {
  border-top-color: #525252;
}
.discalc {
  display: none;
}
.disresform {
  background: #525252;
  padding: 20px 5px 20px 5px;
  -webkit-border-radius: 6px;
  -moz-border-radius: 6px;
  -ms-border-radius: 6px;
  -o-border-radius: 6px;
  border-radius: 6px;
  bottom: 0;
  position: absolute;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://sandywalker.github.io/webui-popover/dist/jquery.webui-popover.min.js"></script>


<a href="#" class="showdisclac" id="showdisclac" data-placement="auto-top" data-animation="pop" data-target="discalc">Discount</a>


<div id="discalc" class="discalc">
  <div class="disresform">
    <h2>Simple Calculator</h2>

    <input id="Result" class="input" value="0" />
    <div id="keys">
      <div id="FirstRow">
        <button id="ClearAll" type="reset" value="CE" class="clean">CE</button>
        <button id="Clear" type="reset" value="C" class="clean">C</button>
        <button id="Add" type="button" value="+" class="operators operand">+</button>
      </div>
      <div id="SecondRow">
        <button id="One" type="button" value="1" class="Show">1</button>
        <button id="Two" type="button" value="2" class="Show">2</button>
        <button id="Three" type="button" value="3" class="Show">3</button>
        <button id="Sub" type="button" value="-" class="operators operand">-</button>
      </div>
      <div id="ThirdRow">
        <button id="Four" type="button" value="4" class="Show">4</button>
        <button id="Five" type="button" value="5" class="Show">5</button>
        <button id="six" type="button" value="6" class="Show">6</button>
        <button id="Mul" type="button" value="*" class="operators operand">*</button>
      </div>
      <div id="FourthRow">
        <button id="Seven" type="button" value="7" class="Show">7</button>
        <button id="Eight" type="button" value="8" class="Show">8</button>
        <button id="Nine" type="button" value="9" class="Show">9</button>
        <button id="Divide" type="button" value="/" class="operators operand">/</button>
      </div>
      <div id="FifthRow">
        <button id="Zero" type="button" value="0" class="Show">0</button>
        <button id="Dot" type="button" value="." class="Show">.</button>
        <button id="Calculate" type="button" value="=" class="operand">=</button>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery popover


    【解决方案1】:

    使用dismissible:false

    /* WEBUI SCRIPT*/
    (function() {
      var settings = {
        trigger: 'click',
        title: '',
        width: 320,
        multi: true,
        closeable: false,
        style: '',
        delay: 300,
        padding: true,
        dismissible:false
      };
    
      function initPopover() {
        var tableContent = $('#discalc').html(),
          tableSettings = {
            content: tableContent,
            width: 298
          };
        $('a.showdisclac').webuiPopover('destroy').webuiPopover($.extend({}, settings, tableSettings));
      }
    
      initPopover();
    })();
    
    
    /* CALCULATOR */
    
    $("document").ready(function() {
      var key = null;
    
      $(document).on("click", ".clean", function() {
        $('.input').val("");
      });
    
      $(document).on("click", ".Show", function() {
        var EText = $('#Result').val();
        if (EText != "0") {
          var val1 = EText;
          var ButtonVal = $(this);
          var val2 = ButtonVal.text();
          var Res = val1 + val2;
          $('#Result').val(Res);
        } else {
          $('#Result').val();
        }
      });
    
      $(function(e) {
        var interRes = null;
        var operator;
        $(document).on("click", ".operators", function(e) {
          var value1 = $('#Result').val();
          if (interRes != null) {
            var result = ApplyOperation(interRes, value1, operator);
            interRes = result;
          } else {
            interRes = value1;
          }
          operator = $(this).text();
          $('input').val("");
        });
        $(document).on("keypress", "#Result", function(e) {
          if ((e.keyCode == 61)) {
            var op = operator;
            var res;
            var value2 = $('#Result').val();
            if ((value2 != "")) {
              var data = value2.split("+");
              if (data.length > 2) res = ApplyOperation(interRes, data[data.length - 1], op);
              else res = ApplyOperation(interRes, data[1], op);
            } else {
              res = interRes;
            }
            $('#Result').val(res);
            interRes = null;
          } else if ((e.keyCode == 43) || (e.keyCode == 45) || (e.keyCode == 42) || (e.keyCode == 47)) {
            var value1 = $('#Result').val();
            var inter = (interRes != null);
            if (inter) {
              var op = operator;
              var data = value1.split("+");
              if (data.length > 2) {
                operator = String.fromCharCode(e.keyCode);
                result = ApplyOperation(interRes, data[data.length - 1], op);
                interRes = result;
              } else {
                operator = String.fromCharCode(e.keyCode);
                result = ApplyOperation(interRes, data[1], op);
                interRes = result;
              }
            } else {
              interRes = value1;
            }
            operator = String.fromCharCode(e.keyCode);
            $('.input').text("");
          }
        });
        $(document).on("click", "#Calculate", function(e) {
          var op = operator;
          var res;
          var value2 = $('#Result').val();
          if ((value2 != "")) {
            res = ApplyOperation(interRes, value2, op);
          } else {
            res = interRes;
          }
          $('#Result').val(res);
          interRes = null;
        });
      });
    
      function ApplyOperation(value1, value2, operator) {
        var res;
        switch (operator) {
          case "+":
            res = addition(value1, value2);
            break;
          case "-":
            res = subtraction(value1, value2);
            break;
          case "*":
            res = multiplication(value1, value2);
            break;
          case "/":
            res = division(value1, value2);
            break;
        }
        return res;
      }
    
      function addition(first, second) {
        var a = parseFloat(first);
        var b = parseFloat(second);
        var total = a + b;
        return total;
      }
    
      function subtraction(first, second) {
        var a = parseFloat(first);
        var b = parseFloat(second);
        var sub = a - b;
    
        return sub;
      }
    
      function multiplication(first, second) {
        var a = parseFloat(first);
        var b = parseFloat(second);
        var product = a * b;
    
        return product;
      }
    
      function division(first, second) {
        var a = parseFloat(first);
        var b = parseFloat(second);
        var divi = a / b;
        return divi;
      }
    
    });
    <link rel="stylesheet" type="text/css" href="http://sandywalker.github.io/webui-popover/dist/jquery.webui-popover.min.css"> .webui-popover-content {
      padding: 0;
    }
    .webui-popover {
      padding: 0;
      border: none;
      border: 0;
      background: transparent;
      -webkit-box-shadow: none;
      -moz-box-shadow: none;
      -ms-box-shadow: none;
      -o-box-shadow: none;
      box-shadow: none;
    }
    .webui-popover.top>.arrow:after,
    .webui-popover.top-right>.arrow:after,
    .webui-popover.top-left>.arrow:after {
      border-top-color: #525252;
    }
    .discalc {
      display: none;
    }
    .disresform {
      background: #525252;
      padding: 20px 5px 20px 5px;
      -webkit-border-radius: 6px;
      -moz-border-radius: 6px;
      -ms-border-radius: 6px;
      -o-border-radius: 6px;
      border-radius: 6px;
      bottom: 0;
      position: absolute;
      width: 100%;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="http://sandywalker.github.io/webui-popover/dist/jquery.webui-popover.min.js"></script>
    
    
    <a href="#" class="showdisclac" id="showdisclac" data-placement="auto-top" data-animation="pop" data-target="discalc">Discount</a>
    
    
    <div id="discalc" class="discalc">
      <div class="disresform">
        <h2>Simple Calculator</h2>
    
        <input id="Result" class="input" value="0" />
        <div id="keys">
          <div id="FirstRow">
            <button id="ClearAll" type="reset" value="CE" class="clean">CE</button>
            <button id="Clear" type="reset" value="C" class="clean">C</button>
            <button id="Add" type="button" value="+" class="operators operand">+</button>
          </div>
          <div id="SecondRow">
            <button id="One" type="button" value="1" class="Show">1</button>
            <button id="Two" type="button" value="2" class="Show">2</button>
            <button id="Three" type="button" value="3" class="Show">3</button>
            <button id="Sub" type="button" value="-" class="operators operand">-</button>
          </div>
          <div id="ThirdRow">
            <button id="Four" type="button" value="4" class="Show">4</button>
            <button id="Five" type="button" value="5" class="Show">5</button>
            <button id="six" type="button" value="6" class="Show">6</button>
            <button id="Mul" type="button" value="*" class="operators operand">*</button>
          </div>
          <div id="FourthRow">
            <button id="Seven" type="button" value="7" class="Show">7</button>
            <button id="Eight" type="button" value="8" class="Show">8</button>
            <button id="Nine" type="button" value="9" class="Show">9</button>
            <button id="Divide" type="button" value="/" class="operators operand">/</button>
          </div>
          <div id="FifthRow">
            <button id="Zero" type="button" value="0" class="Show">0</button>
            <button id="Dot" type="button" value="." class="Show">.</button>
            <button id="Calculate" type="button" value="=" class="operand">=</button>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2014-01-08
      相关资源
      最近更新 更多