如果通过jquery动态添加,我的HTML切换/开关无法正确呈现

我有一个asp.net核心应用程序。

我正在使用切换开关元素:

!function(t){"use strict";function e(e,s){this.$element=t(e),this.options=t.extend({},this.defaults(),s),this.render()}e.VERSION="3.6.0",e.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"light",size:"normal",style:"",width:null,height:null},e.prototype.defaults=function(){return{on:this.$element.attr("data-on")||e.DEFAULTS.on,off:this.$element.attr("data-off")||e.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||e.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||e.DEFAULTS.offstyle,size:this.$element.attr("data-size")||e.DEFAULTS.size,style:this.$element.attr("data-style")||e.DEFAULTS.style,width:this.$element.attr("data-width")||e.DEFAULTS.width,height:this.$element.attr("data-height")||e.DEFAULTS.height}},e.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var e="large"===this.options.size||"lg"===this.options.size?"btn-lg":"small"===this.options.size||"sm"===this.options.size?"btn-sm":"mini"===this.options.size||"xs"===this.options.size?"btn-xs":"",s=t('<label for="'+this.$element.prop("id")+'" class="btn">').html(this.options.on).addClass(this._onstyle+" "+e),o=t('<label for="'+this.$element.prop("id")+'" class="btn">').html(this.options.off).addClass(this._offstyle+" "+e),i=t('<span class="toggle-handle btn btn-light">').addClass(e),l=t('<div class="toggle-group">').append(s,o,i),n=t('<div class="toggle btn" data-toggle="toggle" role="button">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(e).addClass(this.options.style);this.$element.wrap(n),t.extend(this,{$toggle:this.$element.parent(),$toggleon:s,$toggleOff:o,$toggleGroup:l}),this.$toggle.append(l);var h=this.options.width||Math.max(s.outerWidth(),o.outerWidth())+i.outerWidth()/2,a=this.options.height||Math.max(s.outerHeight(),o.outerHeight());s.addClass("toggle-on"),o.addClass("toggle-off"),this.$toggle.css({width:h,height:a}),this.options.height&&(s.css("line-height",s.height()+"px"),o.css("line-height",o.height()+"px")),this.update(!0),this.trigger(!0)},e.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},e.prototype.on=function(t){if(this.$element.prop("disabled"))return!1;this.$toggle.removeclass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),t||this.trigger()},e.prototype.off=function(t){if(this.$element.prop("disabled"))return!1;this.$toggle.removeclass(this._onstyle).addClass(this._offstyle+" off"),!1),e.prototype.enable=function(){this.$toggle.removeclass("disabled"),this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},e.prototype.disable=function(){this.$toggle.addClass("disabled"),this.$toggle.attr("disabled","disabled"),!0)},e.prototype.update=function(t){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(t):this.off(t)},e.prototype.trigger=function(e){this.$element.off("change.bs.toggle"),e||this.$element.change(),this.$element.on("change.bs.toggle",t.proxy(function(){this.update()},this))},e.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var s=t.fn.bootstrapToggle;t.fn.bootstrapToggle=function(s){var o=Array.prototype.slice.call(arguments,1)[0];return this.each(function(){var i=t(this),l=i.data("bs.toggle"),n="object"==typeof s&&s;l||i.data("bs.toggle",l=new e(this,n)),"string"==typeof s&&l[s]&&"boolean"==typeof o?l[s](o):"string"==typeof s&&l[s]&&l[s]()})},t.fn.bootstrapToggle.Constructor=e,t.fn.toggle.noConflict=function(){return t.fn.bootstrapToggle=s,this},t(function(){t("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),t(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(e){t(this).find("input[type=checkbox]").bootstrapToggle("toggle"),e.preventDefault()})}(jQuery);


function append() {
  $("#ulAvailableCameras").append(
    "<li class='list-group-item' style='cursor: pointer; height: 54px;'>" +
    "<div>" +
    "<div style='width: 200px; float: left;'>Camera#1</div>" +
    "<div style='cursor: pointer; width: 200px; float: right;'>" +
    "<input id='chkCloudStatus1' type='checkbox' data-on='Cloud Service is On' data-off='Cloud Service is Off' " +
    "data-width='200px;' checked data-toggle='toggle' data-onstyle='outline-success' data-offstyle='outline-secondary'>" +
    "</div>" +
    "</div>" +
    "</li>");
}
.btn-group-xs>.btn,.btn-xs {
  padding: .35rem .4rem .25rem .4rem;
  font-size: .875rem;
  line-height: .5;
  border-radius: .2rem
}

.checkbox label .toggle,.checkbox-inline .toggle {
  margin-left: -1.25rem;
  margin-right: .35rem
}

.toggle {
  position: relative;
  overflow: hidden
}

.toggle.btn.btn-light,.toggle.btn.btn-outline-light {
  border-color: rgba(0,.15)
}

.toggle input[type=checkbox] {
  display: none
}

.toggle-group {
  position: absolute;
  width: 200%;
  top: 0;
  bottom: 0;
  left: 0;
  transition: left .35s;
  -webkit-transition: left .35s;
  -moz-user-select: none;
  -webkit-user-select: none
}

.toggle-group label,.toggle-group span {
  cursor: pointer
}

.toggle.off .toggle-group {
  left: -100%
}

.toggle-on {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 50%;
  margin: 0;
  border: 0;
  border-radius: 0
}

.toggle-off {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  right: 0;
  margin: 0;
  border: 0;
  border-radius: 0;
  box-shadow: none
}

.toggle-handle {
  position: relative;
  margin: 0 auto;
  padding-top: 0;
  padding-bottom: 0;
  height: 100%;
  width: 0;
  border-width: 0 1px;
  background-color: #fff
}

.toggle.btn-outline-primary .toggle-handle {
  background-color: var(--primary);
  border-color: var(--primary)
}

.toggle.btn-outline-secondary .toggle-handle {
  background-color: var(--secondary);
  border-color: var(--secondary)
}

.toggle.btn-outline-success .toggle-handle {
  background-color: var(--success);
  border-color: var(--success)
}

.toggle.btn-outline-danger .toggle-handle {
  background-color: var(--danger);
  border-color: var(--danger)
}

.toggle.btn-outline-warning .toggle-handle {
  background-color: var(--warning);
  border-color: var(--warning)
}

.toggle.btn-outline-info .toggle-handle {
  background-color: var(--info);
  border-color: var(--info)
}

.toggle.btn-outline-light .toggle-handle {
  background-color: var(--light);
  border-color: var(--light)
}

.toggle.btn-outline-dark .toggle-handle {
  background-color: var(--dark);
  border-color: var(--dark)
}

.toggle[class*=btn-outline]:hover .toggle-handle {
  background-color: var(--light);
  opacity: .5
}

.toggle.btn {
  min-width: 3.7rem;
  min-height: 2.15rem
}

.toggle-on.btn {
  padding-right: 1.5rem
}

.toggle-off.btn {
  padding-left: 1.5rem
}

.toggle.btn-lg {
  min-width: 5rem;
  min-height: 2.815rem
}

.toggle-on.btn-lg {
  padding-right: 2rem
}

.toggle-off.btn-lg {
  padding-left: 2rem
}

.toggle-handle.btn-lg {
  width: 2.5rem
}

.toggle.btn-sm {
  min-width: 3.125rem;
  min-height: 1.938rem
}

.toggle-on.btn-sm {
  padding-right: 1rem
}

.toggle-off.btn-sm {
  padding-left: 1rem
}

.toggle.btn-xs {
  min-width: 2.19rem;
  min-height: 1.375rem
}

.toggle-on.btn-xs {
  padding-right: .8rem
}

.toggle-off.btn-xs {
  padding-left: .8rem
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ulAvailableCameras" class="listViews listViewIndent">
  <li class='list-group-item' style='cursor: pointer; height: 54px;'>
    <div>
      <div style="width: 200px; float: left;">Camera#1</div>
      <div style='cursor: pointer; width: 200px; float: right;'>
        <input id="chkCloudStatus1" type="checkbox" data-on="Cloud Service is On" data-off="Cloud Service is Off" data-width="200px;" checked data-toggle="toggle" data-onstyle="outline-success" data-offstyle="outline-secondary">
      </div>
    </div>
  </li>
</div>

<button onclick="append()">Add New</button>

这可以正确呈现。

如果我删除该列表项并通过JavaScript添加它,怎么办?

但这只是呈现正常的复选框吗?

a44443 回答:如果通过jquery动态添加,我的HTML切换/开关无法正确呈现

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3166611.html

大家都在问