Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ';未捕获类型错误:无法读取属性';选择开始';未定义的';反对_Javascript_Html_Dom - Fatal编程技术网

Javascript ';未捕获类型错误:无法读取属性';选择开始';未定义的';反对

Javascript ';未捕获类型错误:无法读取属性';选择开始';未定义的';反对,javascript,html,dom,Javascript,Html,Dom,我有一个可以工作的格式化程序,可以将基本的html元素插入到textarea标签上选择的文本中。 但现在我必须有一套按钮,可以在几个文本区域中显示。当我尝试对对象执行此操作时,我得到“UncaughtTypeError:无法读取未定义”错误的属性“selectionStart”到每个连接的textarea对象 function Formatter(velem, vb_h, vb_b, vb_i, vb_a, vb_img) // args: textarea elem to connect, h

我有一个可以工作的格式化程序,可以将基本的html元素插入到textarea标签上选择的文本中。 但现在我必须有一套按钮,可以在几个文本区域中显示。当我尝试对对象执行此操作时,我得到“UncaughtTypeError:无法读取未定义”错误的属性“selectionStart”到每个连接的textarea对象

function Formatter(velem, vb_h, vb_b, vb_i, vb_a, vb_img)
// args: textarea elem to connect, header button, bold button, italic button, link button and image button
{
    if(!velem || !vb_h || !vb_b || !vb_i || !vb_a || !vb_img)
        alert("NULL argument!");

    this.elem = velem;
    this.b_h = vb_h;
    this.b_b = vb_b;
    this.b_i = vb_i;
    this.b_a = vb_a;
    this.b_img = vb_img;

    this.f_h = function() 
    { 
            if (this.elem.selectionStart != undefined)
            {
                var startPos = this.elem.selectionStart;
                var endPos = this.elem.selectionEnd;
                var selectedText = this.elem.value.substring(startPos, endPos);

                this.elem.value = this.elem.value.substring(0, startPos) + '<h1>' + selectedText + '</h1>' + this.elem.value.substring(endPos);
            }
    }

    this.f_b = function() 
    {
            if (this.elem.selectionStart != undefined)
            {
                var startPos = this.elem.selectionStart;
                var endPos = this.elem.selectionEnd;
                var selectedText = this.elem.value.substring(startPos, endPos);

                this.elem.value = this.elem.value.substring(0, startPos) + '<b>' + selectedText + '</b>' + this.elem.value.substring(endPos);
            }
    }

    this.f_i = function() 
    {
            if (this.elem.selectionStart != undefined)
            {
                var startPos = this.elem.selectionStart;
                var endPos = this.elem.selectionEnd;
                var selectedText = this.elem.value.substring(startPos, endPos);

                this.elem.value = this.elem.value.substring(0, startPos) + '<i>' + selectedText + '</i>' + this.elem.value.substring(endPos);
            }
    }

    this.f_a = function() 
    {
            if (this.elem.selectionStart != undefined)
            {
                var startPos = this.elem.selectionStart;
                var endPos = this.elem.selectionEnd;
                var selectedText = this.elem.value.substring(startPos, endPos);
                var name = prompt("Podaj nazwę dla tego linku: ", "link");

                this.elem.value = this.elem.value.substring(0, startPos) + '<a href="' + selectedText + '">' + name + '</a>' + this.elem.value.substring(endPos);
            }
    }

    this.f_img = function() 
    {

            if (this.elem.selectionStart != undefined)
            {
                var startPos = this.elem.selectionStart;
                var endPos = this.elem.selectionEnd;
                var selectedText = this.elem.value.substring(startPos, endPos);

                this.elem.value = this.elem.value.substring(0, startPos) + '<img src="' + selectedText + '" />' + this.elem.value.substring(endPos);
            }
    }

    this.b_h.addEventListener('click', this.f_h);
    this.b_b.addEventListener('click', this.f_b);
    this.b_i.addEventListener('click', this.f_i);
    this.b_a.addEventListener('click', this.f_a);
    this.b_img.addEventListener('click', this.f_img);   
}
函数格式化程序(velem、vb_h、vb_b、vb_i、vb_a、vb_img)
//参数:要连接的文本区域元素、标题按钮、粗体按钮、斜体按钮、链接按钮和图像按钮
{
如果(!velem | | |!vb|h | |!vb|b |!vb|i |!vb|a |!vb|img)
警报(“空参数!”);
this.elem=velem;
this.b_h=vb_h;
this.b_b=vb_b;
this.b_i=vb_i;
this.b_a=vb_a;
this.b_img=vb_img;
this.f_h=函数()
{ 
if(this.elem.selectionStart!=未定义)
{
var startPos=this.elem.selectionStart;
var endPos=this.elem.selectionEnd;
var selectedText=this.elem.value.substring(startPos,endPos);
this.elem.value=this.elem.value.substring(0,startPos)+''+selectedText++''+this.elem.value.substring(endPos);
}
}
this.f_b=函数()
{
if(this.elem.selectionStart!=未定义)
{
var startPos=this.elem.selectionStart;
var endPos=this.elem.selectionEnd;
var selectedText=this.elem.value.substring(startPos,endPos);
this.elem.value=this.elem.value.substring(0,startPos)+''+selectedText++''+this.elem.value.substring(endPos);
}
}
this.f_i=函数()
{
if(this.elem.selectionStart!=未定义)
{
var startPos=this.elem.selectionStart;
var endPos=this.elem.selectionEnd;
var selectedText=this.elem.value.substring(startPos,endPos);
this.elem.value=this.elem.value.substring(0,startPos)+''+selectedText++''+this.elem.value.substring(endPos);
}
}
this.f_a=函数()
{
if(this.elem.selectionStart!=未定义)
{
var startPos=this.elem.selectionStart;
var endPos=this.elem.selectionEnd;
var selectedText=this.elem.value.substring(startPos,endPos);
变量名称=提示(“Podaj nazwędla tego linku:”,“link”);
this.elem.value=this.elem.value.substring(0,startPos)+''+this.elem.value.substring(endPos);
}
}
this.f_img=函数()
{
if(this.elem.selectionStart!=未定义)
{
var startPos=this.elem.selectionStart;
var endPos=this.elem.selectionEnd;
var selectedText=this.elem.value.substring(startPos,endPos);
this.elem.value=this.elem.value.substring(0,startPos)+''+this.elem.value.substring(endPos);
}
}
this.b_h.addEventListener('click',this.f_h');
this.b_b.addEventListener('click',this.f_b');
this.b_i.addEventListener('click',this.f_i');
this.b_a.addEventListener('click',this.f_a);
this.b_img.addEventListener('单击',this.f_img);
}
和HTML格式:

Numer testu: <input type="number" name="testnum" id="testnum" /><br /><br />

            <fieldset><legend>Formatowanie</legend>
            <button type="button" id="b2_h1" >Nagłówek</button> <button type="button" id="b2_b" ><b>Pogrubienie</b></button> <button type="button" id="b2_i" ><i>Pochylenie</i></button> <button type="button" id="b2_a" >Link</button> <button type="button" id="b2_img" >Obrazek</button>
            <br />
            </fieldset><br />
            <fieldset><legend>Nowe pytanie</legend>
            Pytanie:<br />
            <textarea id="q_q" cols="95" rows="2"></textarea><br />
            Odpowiedź A:<br />
            <textarea id="q_aa" cols="95" rows="2"></textarea><br />
            Odpowiedź B:<br />
            <textarea id="q_ab" cols="95" rows="2"></textarea><br />
            Odpowiedź C:<br />
            <textarea id="q_ac" cols="95" rows="2"></textarea><br />
            Prawidłowa odpowiedź:<br />
            <input type="radio" id="q_an" value="A"/>A <input type="radio" id="q_an" value="B"/>B <input type="radio" id="q_an" value="C" />C<br /> 
            <button type="button">OK</button>
            </fieldset><br />

            Podgląd: <br />
            <textarea name="val2" id="val2" cols="95" rows="50"></textarea>
            <script type="text/javascript">
                var b2_h1 = document.getElementById('b2_h1'),
                    b2_b = document.getElementById('b2_b'), 
                    b2_i = document.getElementById('b2_i'), 
                    b2_a = document.getElementById('b2_a'),
                    b2_img = document.getElementById('b2_img');

                var f2 = new Formatter(document.getElementById("q_q"), b2_h1, b2_b, b2_i, b2_a, b2_img);
                var f2 = new Formatter(document.getElementById("q_aa"), b2_h1, b2_b, b2_i, b2_a, b2_img);
                var f3 = new Formatter(document.getElementById("q_ab"), b2_h1, b2_b, b2_i, b2_a, b2_img);
                var f4 = new Formatter(document.getElementById("q_ac"), b2_h1, b2_b, b2_i, b2_a, b2_img);
                var f5 = new Formatter(document.getElementById("q_an"), b2_h1, b2_b, b2_i, b2_a, b2_img);
                var f6 = new Formatter(document.getElementById("val2"), b2_h1, b2_b, b2_i, b2_a, b2_img);
            </script>
Numer testu:

甲酸苯胺 Nagłówek Pogrubienie Pochylenie Link Obrazek

诺维皮塔尼 皮塔尼:

OdpowiedźA:

OdpowiedźB:

OdpowiedźC:

Prawidłowa odpowiedź:
A B C
好啊
Podgląd:
var b2_h1=document.getElementById('b2_h1'), b2_b=document.getElementById('b2_b'), b2_i=document.getElementById('b2_i'), b2_a=document.getElementById('b2_a'), b2_img=document.getElementById('b2_img'); var f2=新的格式化程序(document.getElementById(“q_q”)、b2_h1、b2_b、b2_i、b2_a、b2_img); var f2=新的格式化程序(document.getElementById(“q_aa”)、b2_h1、b2_b、b2_i、b2_a、b2_img); var f3=新的格式化程序(document.getElementById(“q_ab”)、b2_h1、b2_b、b2_i、b2_a、b2_img); var f4=新的格式化程序(document.getElementById(“q_ac”)、b2_h1、b2_b、b2_i、b2_a、b2_img); var f5=新的格式化程序(document.getElementById(“q_-an”)、b2_h1、b2_b、b2_i、b2_a、b2_img); var f6=新的格式化程序(document.getElementById(“val2”)、b2_h1、b2_b、b2_i、b2_a、b2_img);

(很抱歉在代码中使用波兰语,但我不想翻译它,这并不重要)

在事件处理程序中(this.f_h et al)
将是事件元素而不是函数对象。因此我需要传递
(或
元素
)作为所有f_xxx?的参数,我不能使用这个解决方案,因为有许多格式化程序对象。在本主题中,我们编写了使用jQuery来完成这项工作的代码。怎样