我在页面做一个复制的功能, 也就是在js中获取上一个标签的内容放到下一个标签、 第一次始终复制不了上一次的内容。(所传参数这些都是对的)、 下一次就可以正常复制、
最奇怪的地方时: 我在js中alert();下随便什么东西,在页面上点击确定就能正确把上一个标签的内容复制到下一个标签、
不用alert();打死就复制不了东西. 求解答啊、 按常理来说js代码应该是对的.
最奇怪的地方时: 我在js中alert();下随便什么东西,在页面上点击确定就能正确把上一个标签的内容复制到下一个标签、
不用alert();打死就复制不了东西. 求解答啊、 按常理来说js代码应该是对的.
window.onload = function(){
var addMo = document.getElementById('addMo');
var totalTag = document.getElementById('totalTag');
var tagUl = document.getElementById('tagUl');
var paramType = document.getElementById('paramType');
var xmlhttp = null;
var HTMLContent = null;
var typeValue = paramType.value;
function addPo(){
var left = $('#tagUl li:last-child').offset().left + 102;
var top = $('#tagUl li:last-child').offset().top + 5;
$('#addMo').css({'left':left,'top':top});
};
function loadJSP(){
if(HTMLContent == null){
if(document.all){ // browser condition
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
xmlhttp = new XMLHttpRequest();
}
typeValue = paramType.value;
$('#change_btn input').css("display","none");
$('#paramType'+typeValue).siblings().css("display","block");
var url = '${basePath}/pages/param/param_type'+typeValue+'.jsp';
// ajax load
xmlhttp.open("POST",url,true);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
HTMLContent = xmlhttp.responseText;
addToHtml();
}
};
xmlhttp.send(null);
return;
}
addToHtml(); //if HTMLContent is not null
};
//如果有标签则不加载新标签
if ($('#tagUl li').length==0&&$('.listDiv').length ==0) {
loadJSP();
}else{
$('#changdu').val($('.listDiv').length);
addPo();
}
function addToHtml(){
if(tagUl.children.length < 10){
var li = document.createElement('li');
tagUl.appendChild(li);
addPo();
var prev = li.previousSibling;
if(!document.all){ while(true){ if(prev.nodeType == 1){
break;
}
else{
if(prev.previousSibling){
prev = prev.previousSibling;
}
else{
break;
}
}
};
}
//search there is any li in document
if(prev){ //set the alt number of li
li.setAttribute('name',Number(prev.getAttribute('name')) + 1);
}
else{
li.setAttribute('name',0);
}
var listDiv = document.createElement("div"); // create web table
listDiv.className = "listDiv";
listDiv.style.display = "block";
var li_name = li.getAttribute('name');
var content = HTMLContent.replace(/\{\*\}/g,li_name);
li.innerHTML = '<img src="${basePath}/images/copy.png" class="copyTag" title="复制" />'+' 标签'+(Number(li_name)+1)+'<img src="${basePath}/images/XXX.gif" class="closeTag" title="关闭" />';
listDiv.innerHTML = content;
var va = (Number(li_name)+1);
$('#copyNumber').val(va);
for(var i=0; i<totalTag.children.length; i++){ // hide all listDiv
totalTag.children[i].style.display = "none";
tagUl.children[i].style.background = "url(${basePath}/images/gray_tab.png) no-repeat";
}
totalTag.appendChild(listDiv);
listDiv.setAttribute('name',li_name); //match the alt number of li which is creating;
/*注释掉绑定事件函数*/
}
else{
alert("最多10个标签");
return false;
}
};
addMo.onclick = function(){
loadJSP();
};
paramType.onchange=function(){
if (confirm("变更类型将重置标签,确认执行吗?")) {
for ( var i =tagUl.children.length-1; i >=0 ; i--) {
tagUl.removeChild(tagUl.children[i]);
}
for ( var j = totalTag.children.length-1; j >=0 ; j--) {
totalTag.removeChild(totalTag.children[j]);
}
HTMLContent = null;
loadJSP();
otherType();
}
else{
paramType.children[typeValue-1].selected='selected';
return false;
}
};
//绑定标签复制事件
$('.copyTag').live("click",function(event){
if (confirm("确认复制该标签的值到新标签吗?")) {
if ($('#tagUl li').length > 10) {
alert("标签不能大于10个");
return false;
}else{
//点击得到标签序号
var tag = $(this).parent().attr('name');
// 取得标签的个数
var number = $('.listDiv').length;
// 获取申请类型
var type = $('#paramType').val();
// 获取标签显示的数字
var copyNumber = $('#copyNumber').val();
loadJSP();
// 判断是否是编辑进来。
if($('#edCopy').val() == 1){
$('#edCopy').val(0);
// 调复制的JS
copyType1(tag,type,number);
}else{ // 调复制的JS
copyType1(tag,type,copyNumber);
}
}
}
event.stopPropagation();
});
};
</script>
上面是页面 增加标签的js方法。 以前一个做页面的同事写的copyType1(tag,type,number); 这是 复制的内容的方法:如下: 只贴了一部分function copyType1(tag, type, number) {
// 需要传入
var number1 = number;
// 被传入的值
var number2 = tag;
// 参数与MO变更
if (type == 1) {
// MO中文
$('#moCh_' + number1).val($('#moCh_' + number2).val());
// MO英文
$('#mo_' + number1).val($('#mo_' + number2).val()); // MO变更动作
var moaction = $('.moAction_' + number2 + ':checked').val();
if (moaction == 1) {
$('#moAction_' + number1 + '_1').attr('checked', 'checked');
} else if (moaction == 2) {
$('#moAction_' + number1 + '_2').attr('checked', 'checked');
} else if (moaction == 3) {
$('#moAction_' + number1 + '_3').attr('checked', 'checked');
}
一般来说第一次不行,第二次可以或者需要中断alert才可以,一般情况是你的javascript还没有载入完。
一般用一个setTimeout(aaa,500)延迟一点执行,或者使用回调方式确保执行顺序就可以了。
是延迟copyType1() 这个方法么? 还是怎么延迟呢?
//绑定标签复制事件$('.copyTag').live("click",function(event){
if (confirm("确认复制该标签的值到新标签吗?")) {
if ($('#tagUl li').length > 10) {
alert("标签不能大于10个");
return false;
}else{//点击得到标签序号
var tag = $(this).parent().attr('name');
// 取得标签的个数
var number = $('.listDiv').length;
// 获取申请类型
var type = $('#paramType').val();// 获取标签显示的数字
var copyNumber = $('#copyNumber').val();
loadJSP(function(){
// 判断是否是编辑进来。
if($('#edCopy').val() == 1){
$('#edCopy').val(0);
// 调复制的JS
copyType1(tag,type,number);
}else{ // 调复制的JS
copyType1(tag,type,copyNumber);
}
}
});
}
event.stopPropagation();
});
};function loadJSP(callback){
if(HTMLContent == null){if(document.all){ // browser conditionxmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
xmlhttp = new XMLHttpRequest();
}typeValue = paramType.value;
$('#change_btn input').css("display","none");
$('#paramType'+typeValue).siblings().css("display","block");
var url = '${basePath}/pages/param/param_type'+typeValue+'.jsp';
// ajax load
xmlhttp.open("POST",url,true);
xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState == 4){
HTMLContent = xmlhttp.responseText;
addToHtml();
callback && typeof callback === 'function' && callback();//成功后执行回调。
}
};xmlhttp.send(null);
return;}addToHtml(); //if HTMLContent is not null,这句就不用了吧。
};