Autor Zpráva
Spectator
Profil
Dobrý večer, do dásledující funkce posílám řetězec "Spectator" a funguje bez problému, pošlu-li tam "Tomáš Kotrla" způsobí to problém ve funkci.
Výstuy jsou:

<div id="chatbox_Tomáš Kotrla" class="chatbox">
<div id="chatbox_Spectator" class="chatbox" style bottom: 0px; right 150px; display:block;">

function chatWith(chatuser) {
	createChatBox(chatuser);
	$("#chatbox_"+chatuser+" .chatboxtextarea").focus();
}

function createChatBox(chatboxtitle,minimizeChatBox) {
	if ($("#chatbox_"+chatboxtitle).length > 0) {
		if ($("#chatbox_"+chatboxtitle).css('display') == 'none') {
			$("#chatbox_"+chatboxtitle).css('display','block');
			restructureChatBoxes();
		}
		$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
		return;
	}


očekávám, že chyba je v diakritice a nejspíš i v té mezeře. Jak se v javascriptu zabavit této chyby, ale ne na úkor toho, že ztratím takovýto formát jména, který je potřeba?
Witiko
Profil
Ani v diakritice, ani v mezeře, leč v jQuery, která se s tímto způsobem zápisu nemá ráda a parsuje řetězec na prvním argumentu blbě.
Zkus to s takto přepsanou funkcí ve standardním javascriptu bez použití frameworku jQuery:

function chatWith(chatuser) {
    createChatBox(chatuser);
    var element = document.getElementById("chatbox_" + chatboxtitle);
    if(!element.getElementsByClassName)
      element.getElementsByClassName = function(a,b){var c=element;var d=new RegExp("(^|\\s)"+a+"(\\s|$)"),b=b||"*",c=c||document,e=(b=="*"&&c.all)?c.all:c.getElementsByTagName(b),f=[],g,h=e.length;for(var i=0;i<h;i++){g=e[i];if(d.test(g.className)){f.push(g)}}return f};
    return element.getElementsByClassName(".chatboxtextarea")[0].focus();
}

function createChatBox(chatboxtitle,minimizeChatBox) {
    var element = document.getElementById("chatbox_" + chatboxtitle);
    if(!element.getElementsByClassName)
      element.getElementsByClassName = function(a,b){var c=element;var d=new RegExp("(^|\\s)"+a+"(\\s|$)"),b=b||"*",c=c||document,e=(b=="*"&&c.all)?c.all:c.getElementsByTagName(b),f=[],g,h=e.length;for(var i=0;i<h;i++){g=e[i];if(d.test(g.className)){f.push(g)}}return f};
    if (element) {
        if (element.style.display == "none") {
            element.style.display = "block";
            restructureChatBoxes();
        }
        element.getElementsByClassName(".chatboxtextarea")[0].focus();
        return;
    }
}
Spectator
Profil
Witiko:
hmm. Já javascript moc neumim a s velkou radostí jsem si stáhnul takvej jednoduchej chat. Moc netušim, jakym způsobem jsi to přepsal. Bohužel jestli je to tím JQuery, tak je to kódu na 430řádků a to rozhodně nedokážu překopat na čistý js. Dík moc
_es
Profil
Spectator:
Bohužel jestli je to tím JQuery, tak je to kódu na 430řádků a to rozhodně nedokážu překopat na čistý js
Z toho, že používaš jQuery, predsa nevyplýva, že musí byť jQuery použité na každom riadku.
Spectator
Profil
_es:
to ne. Ač vůbec jquery nerozumim, tak mam pocit, že na 100% je na řádcích obsahující znak $ a to je dost rozšířené.



/*

Copyright (c) 2009 Anant Garg (anantgarg.com | inscripts.com)

This script may be used for non-commercial purposes only. For any
commercial purposes, please contact the author at
anant.garg@inscripts.com

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

*/

var windowFocus = true;
var username;
var chatHeartbeatCount = 0;
var minChatHeartbeat = 1000;
var maxChatHeartbeat = 33000;
var chatHeartbeatTime = minChatHeartbeat;
var originalTitle;
var blinkOrder = 0;

var chatboxFocus = new Array();
var newMessages = new Array();
var newMessagesWin = new Array();
var chatBoxes = new Array();


$(document).ready(function(){
originalTitle = document.title;
startChatSession();

$([window, document]).blur(function(){
windowFocus = false;
}).focus(function(){
windowFocus = true;
document.title = originalTitle;
});
});

function restructureChatBoxes() {
align = 0;
for (x in chatBoxes) {
chatboxtitle = chatBoxes[x];

if ($("#chatbox_"+chatboxtitle).css('display') != 'none') {
if (align == 0) {
$("#chatbox_"+chatboxtitle).css('right', '20px');
} else {
width = (align)*(225+7)+20;
$("#chatbox_"+chatboxtitle).css('right', width+'px');
}
align++;
}
}
}


function chatWith(chatuser) {
createChatBox(chatuser);
$("#chatbox_"+chatuser+" .chatboxtextarea").focus();
}

function createChatBox(chatboxtitle,minimizeChatBox) {
if ($("#chatbox_"+chatboxtitle).length > 0) {
if ($("#chatbox_"+chatboxtitle).css('display') == 'none') {
$("#chatbox_"+chatboxtitle).css('display','block');
restructureChatBoxes();
}
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
return;
}

$(" <div />" ).attr("id","chatbox_"+chatboxtitle)
.addClass("chatbox")
.html('<div class="chatboxhead"><div class="chatboxtitle">'+chatboxtitle+'</div><div class="chatboxoptions"><a href="javascript:void(0)" onclick="javascript:toggleChatBoxGrowth(\''+chatboxtitle+'\')">-</a> <a href="javascript:void(0)" onclick="javascript:closeChatBox(\''+chatboxtitle+'\')">X</a></div><br clear="all"/></div><div class="chatboxcontent"></div><div class="chatboxinput"><textarea class="chatboxtextarea" onkeydown="javascript:return checkChatBoxInputKey(event,this,\''+chatboxtitle+'\');"></textarea></div>')
.appendTo($( "body" ));

$("#chatbox_"+chatboxtitle).css('bottom', '0px');

chatBoxeslength = 0;

for (x in chatBoxes) {
if ($("#chatbox_"+chatBoxes[x]).css('display') != 'none') {
chatBoxeslength++;
}
}

if (chatBoxeslength == 0) {
$("#chatbox_"+chatboxtitle).css('right', '20px');
} else {
width = (chatBoxeslength)*(225+7)+20;
$("#chatbox_"+chatboxtitle).css('right', width+'px');
}

chatBoxes.push(chatboxtitle);

if (minimizeChatBox == 1) {
minimizedChatBoxes = new Array();

if ($.cookie('chatbox_minimized')) {
minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
}
minimize = 0;
for (j=0;j<minimizedChatBoxes.length;j++) {
if (minimizedChatBoxes[j] == chatboxtitle) {
minimize = 1;
}
}

if (minimize == 1) {
$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','none');
$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','none');
}
}

chatboxFocus[chatboxtitle] = false;

$("#chatbox_"+chatboxtitle+" .chatboxtextarea").blur(function(){
chatboxFocus[chatboxtitle] = false;
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").removeClass('chatboxtextareaselected');
}).focus(function(){
chatboxFocus[chatboxtitle] = true;
newMessages[chatboxtitle] = false;
$('#chatbox_'+chatboxtitle+' .chatboxhead').removeClass('chatboxblink');
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").addClass('chatboxtextareaselected');
});

$("#chatbox_"+chatboxtitle).click(function() {
if ($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') != 'none') {
$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
}
});

$("#chatbox_"+chatboxtitle).show();
}


function chatHeartbeat(){

var itemsfound = 0;

if (windowFocus == false) {

var blinkNumber = 0;
var titleChanged = 0;
for (x in newMessagesWin) {
if (newMessagesWin[x] == true) {
++blinkNumber;
if (blinkNumber >= blinkOrder) {
document.title = x+' says...';
titleChanged = 1;
break;
}
}
}

if (titleChanged == 0) {
document.title = originalTitle;
blinkOrder = 0;
} else {
++blinkOrder;
}

} else {
for (x in newMessagesWin) {
newMessagesWin[x] = false;
}
}

for (x in newMessages) {
if (newMessages[x] == true) {
if (chatboxFocus[x] == false) {
//FIXME: add toggle all or none policy, otherwise it looks funny
$('#chatbox_'+x+' .chatboxhead').toggleClass('chatboxblink');
}
}
}

$.ajax({
url: "chat.php?action=chatheartbeat",
cache: false,
dataType: "json",
success: function(data) {

$.each(data.items, function(i,item){
if (item) { // fix strange ie bug

chatboxtitle = item.f;

if ($("#chatbox_"+chatboxtitle).length <= 0) {
createChatBox(chatboxtitle);
}
if ($("#chatbox_"+chatboxtitle).css('display') == 'none') {
$("#chatbox_"+chatboxtitle).css('display','block');
restructureChatBoxes();
}

if (item.s == 1) {
item.f = username;
}

if (item.s == 2) {
$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>');
} else {
newMessages[chatboxtitle] = true;
newMessagesWin[chatboxtitle] = true;
$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.f+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>');
}

$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
itemsfound += 1;
}
});

chatHeartbeatCount++;

if (itemsfound > 0) {
chatHeartbeatTime = minChatHeartbeat;
chatHeartbeatCount = 1;
} else if (chatHeartbeatCount >= 10) {
chatHeartbeatTime *= 2;
chatHeartbeatCount = 1;
if (chatHeartbeatTime > maxChatHeartbeat) {
chatHeartbeatTime = maxChatHeartbeat;
}
}

setTimeout('chatHeartbeat();',chatHeartbeatTime);
}});
}

function closeChatBox(chatboxtitle) {
$('#chatbox_'+chatboxtitle).css('display','none');
restructureChatBoxes();

$.post("chat.php?action=closechat", { chatbox: chatboxtitle} , function(data){
});

}

function toggleChatBoxGrowth(chatboxtitle) {
if ($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') == 'none') {

var minimizedChatBoxes = new Array();

if ($.cookie('chatbox_minimized')) {
minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
}

var newCookie = '';

for (i=0;i<minimizedChatBoxes.length;i++) {
if (minimizedChatBoxes[i] != chatboxtitle) {
newCookie += chatboxtitle+'|';
}
}

newCookie = newCookie.slice(0, -1)


$.cookie('chatbox_minimized', newCookie);
$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','block');
$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','block');
$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
} else {

var newCookie = chatboxtitle;

if ($.cookie('chatbox_minimized')) {
newCookie += '|'+$.cookie('chatbox_minimized');
}


$.cookie('chatbox_minimized',newCookie);
_es
Profil
Spectator:
jQuery je jedna globálna funkcia v JS, nazvaná $, nič iné.
Jednu zle fungujúcu funkciu, v ktorej je funkcia $ volaná, môžeš kľudne nahradiť inou, lepšie fungujúcou funkciou, v ktorej funkcia $ volaná nie je. Tak sa ti snažil poradiť Witiko. Už ti len zostáva zistiť, či tie jeho funkcie spoľahlivo fungujú.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: