Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 使用jQuery在wordpress中将文本输入更改为选择_Javascript_Jquery_Wordpress - Fatal编程技术网

Javascript 使用jQuery在wordpress中将文本输入更改为选择

Javascript 使用jQuery在wordpress中将文本输入更改为选择,javascript,jquery,wordpress,Javascript,Jquery,Wordpress,我正在使用WordPress模块abase从数据库中获取一些数据,并将它们发送到表单中。问题是,abase表单不允许使用select输入。正因为如此,我试图将文本输入转换为select。我创建了toSelect函数,将元素id和测试选项列表传递给该函数,并将元素id放入函数定义 function toSelect(itemid,valuelist) { var out = ''; out += '<select id="bus311mtd_2_status" style="

我正在使用WordPress模块abase从数据库中获取一些数据,并将它们发送到表单中。问题是,abase表单不允许使用select输入。正因为如此,我试图将文本输入转换为select。我创建了toSelect函数,将元素id和测试选项列表传递给该函数,并将元素id放入函数定义

function toSelect(itemid,valuelist) {
    var out = '';
    out += '<select id="bus311mtd_2_status" style="width:50px;">';
    for (i=0; i < valuelist.length; i++) {
        out += '<option value="'+valuelist[i]+'">'+valuelist[i]+'</option>';
    }
    out += '</select>';
    alert(out);
    $("#bus311mtd_2_status").replaceWith(out);
    //$("#bus311mtd_2_status").replaceWith('<input type="text" value="zamontowane">');
}
alertout提供了很好的select输入代码,但$bus311mtd_2_status.replaceWither不起作用

甚至像:$bus311mtd\u 2\u status.replaceWith这样的东西也不起作用

$("#bus311mtd_2_status").replaceWith('<input type="text" value="zamontowane">');
id为bus311mtd_2_状态的元素确实存在,即使用document.getElementById更改其值可以正常工作


也许jQuery不起作用?

您的代码对我来说似乎很好。也许是你的函数调用。我用过:

toSelect(null, ['a', 'b', 'c']);
函数中似乎未使用itemid

这里有一个你的代码工作的小提琴:

下面是该函数的一个稍微优化的版本,它使用itemid参数:

function toSelect2(itemid,valuelist) {
    var html = '<select id="' + itemid + '" style="width:50px;"><option>' +
        valuelist.join('</option><option>') +
        '</option></select>';
    $('#' + itemid).replaceWith(html);
}

toSelect2('myInput2', ['d', 'e', 'f']);

感谢您的回答和优化。我最初使用itemid,但由于问题,我临时将其替换为某个现有元素的id,以确保问题在其他地方

所有代码直到第一个警报正常工作,alertout将弹出一个带有文本的窗口:

<select id="bus311mtd_2_status" style="width:50px;"><option value="ready">ready</option><option value="awaiting">awaiting</option></select>
这是意料之中的事。但问题从下一行开始

我想证明,即使像下面这样简单的代码也不起作用

$("#bus311mtd_2_status").replaceWith('<input type="text" value="zamontowane">');
因此,jQuery似乎不受支持


我还有另一个观察:在脚本标记中,不允许有空行,如果有空行,代码将不起作用。

对不起,我的以上答案应该作为对您答案的注释出现。请检查控制台是否有任何错误。replaceWith应能正常工作。上述声明没有问题。但是,如果您愿意,您可以使用替代方案$母线311MTD_2_状态。之后。移除;我收到以下错误:TypeError:$不是函数请确保代码中附加了jquery脚本,或者通过控制台上的$.fn.jquery进行检查。它将返回一个版本号。如果没有,请将jquery插件添加到代码中。并将我的代码更新为jQuerybus311mtd_2_status.after.remove;这就是问题所在。现在它工作得很好。但还有一件事:替换后的元素不会从当前主题中获得样式,它们不需要任何样式。是否有任何方法可以将样式附加到当前主题中?如果您的样式来自一些短css代码,请将它们复制到css类中,并在输入标记中使用它们。如果它来自JS/Jquery,那么调用负责设计其他类似元素样式的函数。或者使用jquery css方法应用自定义css属性。